pytorch 8 線性回歸實現

2021-10-12 12:45:31 字數 1774 閱讀 5232

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....