使用 PyTorch 進行線性回歸

| | | | | | | | | | | | | | | | | | | |

首先,您需要在 Python 環境中安裝 PyTorch。最簡單的方法是 —使用 pip conda 工具。訪問 pytorch.org 並安裝您想要使用的 Python 解釋器和包管理器版本。


# 我們可以在 Jupyter notebook 上運行這個 Python 代碼
# 自動安裝正確的版本
# PyTorch.


#http://pytorch.org / from os import path

from wheel.pep425tags import get_abbr_impl, get_impl_ver, get_abi_tag

平台 = `{} {} - {}` . format (get_abbr_impl(), get_impl_ver(), get_abi_tag())

加速器 = `cu80` if path.exists ( `/opt/bin/nvidia-smi` ) else `cpu`


! pip install - q http: / / download.pytorch.org / whl / {加速器} / 火炬 - 0.3 0.post4 - {platform} - linux_x86_64.whl torchvision

安裝了 PyTorch,讓我們現在看代碼。
下面寫兩行,導入需要的庫函數和對象。


import torch

from torch.autograd import 變量

我們也定義了一些數據,賦值給變量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 __ init __ ( self ):

super (LinearRegressionModel, self ) .__ init __ ()

self 。線性 = torch.nn.Linear ( 1 , 1 ) # 一個輸入和一次退出


def forward ( self , x):

y_pred = self 。線性 (x)

return y_pred

如您所見,我們的 Model 類是 torch.nn.module 的子類。另外,由於我們這裡只有一個輸入和一個輸出,所以我們使用輸入輸出大小為1的線性模型。

接下來,我們創建這個模型的對象。

# 我們的模型

our_model = LinearRegressionModel ()

之後選擇優化器並損失標準。在這裡,我們將使用均方誤差 (MSE) 作為我們的損失函數,並使用隨機梯度下降 (SGD) 作為我們的優化器。我們還任意將學習率固定為 0.01。


標準 = torch.nn.MSELoss (size_average = False )

優化器 = torch.optim.SGD (our_model.parameters(), lr = 0.01 )

現在我們進入學習階段。我們在訓練期間執行了 500 次以下任務:

  1. 通過傳入我們的數據併計算出預測的 y 值來執行實時傳輸。
  2. 使用 MSE 計算損失。
  3. 將所有梯度重置為0,反向傳播,然後更新權重。

for epoch in range ( 500 ):


# 前向傳遞:通過傳遞計算預測的 y

#x 到模型

pred_y = our_model (x_data)


# 計算並丟失打印

丟失 = criteria (pred_y, y_data)


# 零梯度,回溯

# 並更新權重。

optimizer.zero_grad()

loss.backward()

optimizer.step()

print ( ` epoch {}, loss {} ` . 格式 (epoch, loss.data [ 0 ]))

完成訓練後,我們使用我們定義的模型。所以我們檢查它是否有一個未知的 x_data 值,在本例中是 4.0。


new_var = 變量 (torch.Tensor ([[[ 4.0 ] ]))

pred_y = our_model (new_var)

print ( "預測(訓練後)" , 4 , our_model ( new_var) .data [ 0 ] [ 0 ])

如果您正確執行了所有步驟,您將看到條目 4.0 會得到一個值非常接近8.0,如下圖。因此,我們的模型本質上是在沒有顯式編程的情況下學習輸入和輸出之間的關係。

predict (after training) 4 7.966438293457031

供參考,你可以找到本文所有代碼如下:


import torch

from torch.autograd import 變量

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 __ ( self ):

super (LinearRegressionModel, self ) .__ init __ ()

self 。線性 = torch.nn.Linear( 1 , 1 ) # 一個輸入和一個輸出


def forward ( self , x):

y_pred = self 。線性 (x)

return y_pred


# 我們的模型

our_model = LinearRegressionModel ()

標準 = torch.nn.MSELoss (size_average = False )

優化器 = torch.optim。 SGD(our_model.parameters(),lr = 0.01 )


for epoch in range ( 500 ):

# Forward pass:通過傳遞計算預測的y

# —Ö to model

pred_y = our_model (x_data)


# 計算並丟失 print

loss = 標準 (pred_y, y_data)


# 零梯度,回傳,

# 並更新權重。

optimizer.zero_grad()

loss.backward()

optimizer.step()

print ( `epoch {}, loss {}` . 格式 (epoch, loss.data [ 0 ]))


new_var = 變量 (torch.Tensor ([[ 4.0 ]]))

pred_y = our_model (new_var)

print ( "預測(訓練後)" , 4 , our_model (new_var) .data [ 0 ] [ 0 ])

鏈接