PyTorch를 사용한 선형 회귀

| | | | | | | | |

먼저 Python 환경에 PyTorch를 설치해야 합니다. 가장 쉬운 방법은 — pip 또는 conda 도구를 사용하세요. pytorch.org 를 방문하여 사용하려는 Python 인터프리터 및 패키지 관리자 버전을 설치하십시오.


# Jupyter 노트북에서 이 Python 코드를 실행할 수 있습니다.
# 올바른 버전을 자동으로 설치하기 위해
# 파이토치.


# http://pytorch.org / os 가져오기 경로

< 코드 클래스 = "일반"> wheel.pep425tags <코드 클래스 = "keyword"> 가져오기 <코드 클래스 = "plain"> get_abbr_impl, get_impl_ver, get_abi_tag

<코드 클래스 = "일반"> 플랫폼 <코드 클래스 = "키워드"> = <코드 클래스 = "문자열"> `{} {} - {}` <코드 클래스 = "일반">. <코드 클래스 = "기능 "> 형식 <코드 클래스 ="일반 "> (get_abbr_impl(), get_impl_ver(), get_abi_tag())

가속기 = `cu80` if path.exists ( `/ opt / bin / nvidia-smi` ) else `cpu`


<코드 클라 ss = "일반">! pip 설치 <코드 클래스 = "키워드"> - <코드 클래스 = "일반"> q http: <코드 클래스 = "키워드"> / <코드 클래스 = "키워드"> / <코드 클래스 = "일반"> download.pytorch.org <코드 클래스 = "키워드"> / <코드 클래스 = "일반"> whl <코드 클래스 = "키워드"> / <코드 클래스 = "일반"> {액셀러레이터} <코드 클래스 = "키워드"> / <코드 클래스="일반 "> 토치 - 0.3 . <코드 클래스 = "값"> 0.post4 <코드 클래스 = "키워드"> - <코드 클래스 = "일반"> {플랫폼} <코드 클래스 = "keyword"> - linux_x86_64.whl torchvision

PyTorch가 설치되었으면 이제 코드를 살펴보세요.
아래 두 줄을 작성하여 필요한 라이브러리 함수 및 개체를 가져오세요.


가져오기 토치

torch.autograd 가져오기 변수

또한 일부 데이터를 정의하고 이를 변수 x_datay_data,은 다음과 같습니다.


x_data = 변수(torch.Tensor([[ 1.0 <코드 클래스 = "일반">], [ <코드 클래스 = "값"> 2.0 <코드 클래스 = "일반">], [ 3.0 ]]))

y_data = 변수(torch.Tensor([[ 2.0 <코드 클래스 = "일반">], [ <코드 클래스 = "값"> 4.0 <코드 클래스 = "일반">], [ <코드 클래스 = "값" > 6.0 ]]))

여기 x_data & #8212; 우리의 독립 변수와 y_data — 우리의 종속 변수. 이것은 지금 우리의 데이터 세트가 될 것입니다. 다음으로 모델을 정의해야 합니다. 모델을 정의하는 데에는 두 가지 주요 단계가 있습니다. 그것들은:

  1. 모델을 초기화하는 것입니다.
  2. 앞으로 패스를 선언합니다.

아래 클래스를 사용합니다.

class LinearRegressionModel(torch.nn.Module):


def __ 초기화 __ ( 자기 ):

슈퍼 (LinearRegressionModel, 자체 ) .__ 초기화 __ ()

자체 . 선형 = torch.nn.Linear ( 1 , 1 ) # 하나의 입력 및 하나의 종료


def 앞으로 ( 자기 , x):

y_pred = <코드 클래스 = "color1"> 자체 <코드 클래스 = "일반">. 선형(x)

return y_pred

보시다시피 Model 클래스는 torch.nn.module의 하위 클래스입니다. 또한 여기에 입력과 출력이 하나만 있으므로 입력 및 출력 크기가 1인 선형 모델을 사용합니다.

다음으로 이 모델의 개체를 만듭니다.

# 우리 모델

our_model = LinearRegressionModel ()

그 후 최적화 프로그램을 선택하고 손실 기준. 여기서 우리는 평균 제곱 오차(MSE)를 손실 함수로 사용하고 확률적 기울기 하강법(SGD)을 최적화기로 사용합니다. 또한 학습률을 임의로 0.01로 수정합니다.


기준 = torch.nn.MSELoss (size_average <코드 클래스 = "키워드"> = <코드 클래스 = "color1"> 거짓 <코드 클래스 = "일반">)

<코드 클래스 = "plain"> 옵티마이저 = torch.optim.SGD (our_model.parameters (), lr = <코드 클래스 = "값"> 0.01 <코드 클래스 = "일반">)

이제 학습 단계에 이르렀습니다. 훈련 중에 다음 작업을 500번 수행합니다.

  1. 데이터를 전달하고 예측된 y 값을 파악하여 실시간 전송을 수행합니다.
  2. MSE를 사용하여 손실을 계산합니다.
  3. 모든 그래디언트를 0으로 재설정하고 역전파한 다음 가중치를 업데이트합니다.

시대 범위 ( 500 ):


# 순방향 패스:

#x 모델

pred_y = our_model (x_data)


# 계산 및 인쇄 손실

손실 = 기준 (pred_y, y_data)


# 제로 그래디언트, 역추적

# 가중치를 업데이트합니다.

optimizer.zero_grad ()

loss.backward ()

optimizer.step ()

인쇄 ( ` 시대 {}, 손실 {} ` . 형식 (epoch, loss.data [ 0 ]))

교육을 완료한 후 다음을 사용하여 올바른 결과를 얻고 있는지 확인합니다. 우리가 정의한 모델. 그래서 우리는 알 수 없는 x_data 값을 확인합니다. 이 경우에는 4.0입니다.


new_var < 코드 클래스 = " 키워드 "> = 변수(torch.Tensor([[[ 4.0 <코드 클래스 = "일반 ">] ]))

<코드 클래스 = "일반"> pred_y <코드 클래스 = "키워드"> = <코드 클래스 = " plain"> our_model ( new_var)

인쇄 ( "예측( 훈련 후) " , 4 , our_model( new_var) .data [ <코드 클래스 = "값"> 0 <코드 클래스 = "일반">] [ <코드 클래스 = "값"> 0 ])

모든 단계를 올바르게 따랐다면 항목 4.0에 대해 값은 아래와 같이 8.0에 매우 가깝습니다. 따라서 우리 모델은 명시적 프로그래밍 없이 기본적으로 입력과 출력 간의 관계를 학습합니다.

predict (after training) 4 7.966438293457031

참고로 다음을 찾을 수 있습니다. 아래 이 기사의 모든 코드:


import 토치

torch.autograd 가져오기 변수

x_data = 변수(torch.Tensor([[ 1.0 ], [ <코드 클래스 ="값 "> 2.0 <코드 클래스 ="일반 ">], [ <코드 클래스 ="값 "> 3.0 <코드 클래스 = "일반">]]))

<코드 클래스 = "일반"> y_data <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> V ariable (torch.Tensor([[ 2.0 ], [ 4.0 < /코드> <코드 클래스 ="일반 ">], [ <코드 클래스 ="값 "> 6.0 <코드 클래스 = "일반">]]))



class LinearRegressionModel(torch.nn.Module):


def __ init __ ( 자기 ):

슈퍼 (LinearRegressionModel, 자체 <코드 클래스 = "일반">) .__ 초기화 __ ()

자체 <코드 클래스 = "일반">. 선형 <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> torch.nn.Linear ( <코드 클래스 = "값"> 1 , 1 ) # 하나의 입력 및 하나의 출력


def 앞으로 ( 자기 , x):

y_pred = <코드 클래스 = "color1"> 자체 <코드 클래스 = "일반">. 선형(x)

return y_pred


# 우리 모델

our_model = LinearRegressionModel ()

기준 = torch.nn.MSELoss (size_average = False < 코드 클래스 = "일반"> )

<코드 클래스 = "일반"> 옵티마이저 <코드 클래스 = "키워드"> = <코드 클래스 = " 일반"> 토치.최적. SGD (our_model.parameters (), lr = 0.01 )


for 시대 in <코드 클래스 = "함수"> 범위 <코드 클래스 = "일반"> ( <코드 클래스 = "값 "> 500 <코드 클래스 ="일반 ">):

# 순방향 전달: 전달하여 예측된 y를 계산

# —모델에 대한

pred_y <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> our_model(x_data)


# 계산 및 손실 인쇄

손실 = < 코드 클래스 ="plain "> 기준(pred_y, y_data)


# 제로 그래디언트, 백 패스,

# 가중치를 업데이트합니다.

optimizer.zero_grad ()

loss.backward ()

optimizer.step ()

인쇄 ( `epoch {}, 손실 {}` . 형식 (epoch, loss.data [ 0 < 코드 클래스 = "일반">]))


<코드 클래스 = "일반"> new_var <코드 클래스 = "키워드"> = 변수(torch.Tensor([[ 4.0 ]]))

<코드 클래스 = "일반"> pred_y <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> our_model (new_var)

인쇄 ( "예측(훈련 후)" <코드 클래스 = "일반">, <코드 클래스 = "값"> 4 <코드 클래스 = "일반">, our_model(new_var) .data [ <코드 클래스 = "값"> 0 <코드 클래스 = "일반">] [ <코드 클래스 = "값"> 0 <코드 클래스 = "일반">])

링크

이 문서가 문제를 해결하는 데 도움이 되었기를 바랍니다. PyTorch를 사용한 선형 회귀 외에 다른 __del__ 관련 주제를 확인하세요.

파이썬에서 뛰어나고 싶으십니까? 2022최고의 Python 온라인 과정에 대한 검토를 참조하세요. 데이터 과학에 관심이 있다면 R로 프로그래밍을 배우는 방법도 확인하세요.

그런데 이 자료는 다른 언어로도 제공됩니다.



Cornwall Lehnman

San Francisco | 2022-11-29

설명해주셔서 감사합니다! 몇 시간 동안 PyTorch를 사용한 선형 회귀을(를) 고민하다가 드디어 해냈습니다 🤗. 피드백과 함께 내일 돌아올 것입니다

Anna OConnell

Prague | 2022-11-29

mean은(는) 모든 것이 약간 혼란스럽습니다 😭 PyTorch를 사용한 선형 회귀이(가) 만난 유일한 문제는 아닙니다.. 더 이상 나타나지 않기를 바랄뿐입니다

Carlo Danburry

Rome | 2022-11-29

코딩 인터뷰를 준비하고 있었습니다. 명확히 해 주셔서 감사합니다. Python의 PyTorch를 사용한 선형 회귀은 가장 간단한 것이 아닙니다.. 어제 확인했는데 작동합니다!

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

Common xlabel/ylabel for matplotlib subplots

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Why do I get "Pickle - EOFError: Ran out of input" reading an empty file?

12 answers

NUMPYNUMPY

Flake8: Ignore specific warning for entire file

12 answers

NUMPYNUMPY

glob exclude pattern

12 answers

NUMPYNUMPY

How to avoid HTTP error 429 (Too Many Requests) python

12 answers

NUMPYNUMPY

Python CSV error: line contains NULL byte

12 answers

NUMPYNUMPY

csv.Error: iterator should return strings, not bytes

12 answers


Wiki

Python | How to copy data from one Excel sheet to another

Common xlabel/ylabel for matplotlib subplots

Check if one list is a subset of another in Python

sin

How to specify multiple return types using type-hints

exp

Printing words vertically in Python

exp

Python Extract words from a given string

Cyclic redundancy check in Python

Finding mean, median, mode in Python without libraries

cos

Python add suffix / add prefix to strings in a list

Why do I get "Pickle - EOFError: Ran out of input" reading an empty file?

Python - Move item to the end of the list

Python - Print list vertically