import torch
import matplotlib.pyplot as plt
lr =
0.05
# 設定隨機種子 也就是間隔i次生成的數都一樣 如果為1的話每次生成的都一樣
torch.manual_seed(1)
# 隨機生成資料集 # 生成正態分佈 均值是 0 標準差是1
# 什麼是均值分布? 什麼是正態分佈?
# torch.rand() 和 torch.randn() 乙個是均勻分布 乙個是正態分佈
x = torch.rand(20,
1)*10
y =2
* x +(5
+ torch.randn(20,
1))# 構建引數 == 構建網路
# 在構建引數的的時候需要在引數後邊宣告是否是需要訓練的引數
w = torch.randn((1
), requires_grad=
true
)b = torch.zeros((1
), requires_grad=
true
)# 迴圈迭代
for i in
range
(1000):
# 前向傳播宣告
# torch.multiply() alias for torch.mul()
# 也就是說 這兩個是一回事
wx = torch.mul(w, x)
y_pred = torch.add(wx, b)
# mse 均方誤差 對所有元素求均值
loss =
(0.5
*(y - y_pred)**2
).mean(
)# 反向傳播, 該均值是如何反向傳播的?
loss.backward(
)# 更新引數 減去梯度 進行梯度下降
b.data.sub_(lr * b.grad)
w.data.sub_(lr * w.grad)
# 需要手動將梯度置零
w.grad.zero_(
) b.grad.zero_(
)# 繪圖
if i %
20==0:
# 這個功能應該是畫出散點圖
plt.scatter(x.data.numpy(
), y.data.numpy())
# 這個功能應該是畫線的
plt.plot(x.data.numpy(
), y_pred.data.numpy(),
"r-"
, lw=5)
# 新增文字的
plt.text(2,
20,"loss = %.4f"
% loss.data.numpy(
), fontdict=
)# 設定 x y 軸範圍的
plt.xlim(
1.5,10)
plt.ylim(8,
28)# 設定標題的
plt.title(
"iteration: {}\nw:{} b{}"
.format
(i, w.data.numpy(
), b.data.numpy())
)# 有 plt.show() 和 sleep()的功能
plt.pause(
0.5)
# 需要將張量轉化為numpy才能夠比較
if loss.data.numpy(
)<1:
break
Pytorch實現線性回歸 手動
pytorch實現線性回歸 假設我們的基礎模型就是 y wx b 其中w和b均為引數,我們使用y 3 x 0.8來構造資料x,y 所以最後通過模型應該能夠得到w和b應該在3與0.8附近。思路如下 1準備資料 2計算 值 3計算損失,把引數的梯度設定為0,進行反向傳播 4更新引數 5效果視覺化 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....