使用 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 ])

鏈接

我們希望本文能幫助您解決問題。 除了 使用 PyTorch 進行線性回歸,查看其他與 __del__ 相關的主題。

想在 Python 中出類拔萃? 查看我們對 最佳 Python 在線課程 2022的評論。 如果您對數據科學感興趣,請查看如何學習 R 編程

順便說一句,此材料也有其他語言版本:



Oliver Lehnman

Munchen | 2022-11-29

也许有其他的答案?什么是使用 PyTorch 進行線性回歸?到底是什么意思?. 我只希望不再出現

Chen Lehnman

Munchen | 2022-11-29

简单地说,很清楚。谢谢你的分享。使用 PyTorch 進行線性回歸和其他问题的exp一直是我的弱点😁。. 將在我的學士論文中使用它

Chen Porretti

London | 2022-11-29

exp是每一个有点混乱的😭 使用 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