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 <코드 클래스 = "일반">])

링크