pytorch 線性回歸(Regression)

2021-10-08 18:28:30 字數 2300 閱讀 1893

使用pytorch+python實現回歸。

程式:

import torch

import torch.nn.functional as f

from matplotlib import pyplot as plt

# 建立資料

x = torch.unsqueeze(torch.linspace(-1

,1,100

), dim=1)

# x shape=(100,1)

y = x.

pow(2)

+0.2

*torch.rand(x.size())

# y shape=(100,1)

# drawing data

# plt.scatter(x.data.numpy(),y.data.numpy())

# plt.show()

# 建立網路

class

net(torch.nn.module)

:# 繼承torch的module

def__init__

(self, n_feature, n_hidden, n_output)

:super

(net, self)

.__init__(

)# 繼承__init__功能

# 定義每層用什麼樣的形式

self.hidden = torch.nn.linear(n_feature, n_hidden)

# 隱藏層輸出

self.predict = torch.nn.linear(n_hidden, n_output)

# 輸出層輸出

defforward

(self, x)

:# module的正向傳播功能

x = f.relu(self.hidden(x)

)# 啟用函式

x = self.predict(x)

# 輸出值

return x

net = net(n_feature=

1, n_hidden=

10, n_output=1)

# print(net)

# 訓練

optimizer = torch.optim.sgd(net.parameters(

), lr=

0.2)

# 傳入net的所有引數,學習率

loss_func = torch.nn.mseloss(

)# 代價函式:**值和真實值得誤差(均方差)

for i in

range

(100):

prediction = net(x)

# 給net訓練資料x,輸出**值

loss = loss_func(prediction, y)

# 計算兩者的誤差

optimizer.zero_grad(

)# 清空上一步的殘餘更新引數值

loss.backward(

)# 誤差反向傳播,更新引數

optimizer.step(

)# 將引數更新值施加到net的parameters上

# 視覺化

if i %5==

0:plt.cla(

) plt.scatter(x.data.numpy(

), y.data.numpy())

plt.plot(x.data.numpy(

), prediction.data.numpy(),

'r-'

, lw=3)

plt.text(

0.5,0,

'loss=%.4f'

% loss.data.numpy(

), fontdict=

) plt.pause(

0.1)

結果:

pytorch線性回歸

線性回歸假設輸出與各個輸入之間是線性關係 y wx b pytorch定義線性回歸模型 def linreg x,w,b return torch.mm x,w b線性回歸常用損失函式是平方損失 2優化函式 隨機梯度下降 小批量隨機梯度下降 mini batch stochastic gradien...

pytorch 線性回歸

import torch from torch.autograd import variable import torch.nn.functional as f import matplotlib.pyplot as plt print torch.linspace 1,1,100 x torch....

Pytorch之線性回歸

import torch from torch import nn import numpy as np import torch.utils.data as data from torch.nn import init 使得模型的可復現性 torch.manual seed 1 設定預設的資料格式...