使用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 設定預設的資料格式...