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準備資料
#1.準備資料y=
3x+0.8
,準備引數
import torch
x=torch.
rand([
50])#x是隨機的50個資料 x在0
-1之間y=3
*x+0.8#y是x的函式 也是50個資料
#視覺化一下
#準備一下要去擬合的線性回歸的w和b
w=torch.
rand(1
,requires_grad=true)#隨機初始的乙個w 範圍在0
-1之間
b=torch.
rand(1
,requires_grad=true)#隨機初始的乙個b 範圍在0
-1之間
print
(w)print
(b)
tensor([0.0100], requires_grad=true)
tensor([0.4700], requires_grad=true)
## 準備一下函式:計算損失,把引數的梯度設定為0,進行反向傳播
def loss_fn
(y,y_predict)
: loss=
(y_predict-y)
.pow(2
).mean
()#均方誤差
#每次反向傳播前把梯度置為0
for i in [w,b]
:#w和b中
if i.grad is not none:#如果梯度不為空 就設定為0
i.grad.data.
zero_()
loss.
backward
()#反向傳播
return loss.data#返回loss的具體數值
## 準備函式:更新引數
def optimize
(learning_rate)
: w.data-
=learning_rate*w.grad.data#這裡運用的是梯度下降法
b.data-
=learning_rate*b.grad.data
for i in range
(3000):
## 2計算**值
y_predict=x*w+b
## 3計算損失 並把引數的梯度置為0 進行反向傳播
loss=
loss_fn
(y,y_predict)
if i%
300==0:
print
('迭代次數:'
,i,'\t誤差:'
,loss)
## 4更新引數w和b
optimize
(0.01
)
迭代次數: 0 誤差: tensor(3.5854)
迭代次數: 300 誤差: tensor(0.1780)
迭代次數: 600 誤差: tensor(0.0958)
迭代次數: 900 誤差: tensor(0.0516)
迭代次數: 1200 誤差: tensor(0.0278)
迭代次數: 1500 誤差: tensor(0.0149)
迭代次數: 1800 誤差: tensor(0.0080)
迭代次數: 2100 誤差: tensor(0.0043)
迭代次數: 2400 誤差: tensor(0.0023)
迭代次數: 2700 誤差: tensor(0.0013)
## 5效果視覺化
y_predict=w*x+b #訓練好的w和b 然後算出y的**值
plt.
figure()
plt.
scatter
(x,y,c=
'b')#原來的資料用散點圖 顏色是藍色
plt.
plot
(x,y_predict.
detach()
.numpy()
,c='r'
)#擬合的資料用直線圖 顏色是紅色
完成。
手動實現線性回歸
我們自定義資料,使用torch實現線性回歸。假設我們的基礎模型是y wb c,其中,w,b均為引數 我們是用y 3x 0.8 來構造資料x,y 所以最後求出的w,b應該接近3,0.8.1.準備資料 2.計算 值 3.計算損失,把引數梯度設定為0,進行反向傳播。4.更新引數 import torch ...
手動實現線性回歸
找到 函式.y wx b x 找到目標函式 損失函式 最小二乘法.1 2m i 1 m yi y frac sum m y i hat 2m1 i 1 m yi y 使用梯度下降找到損失函式取的最小值的時候對應的係數.import numpy as np import pandas as pd im...
pytorch線性回歸
線性回歸假設輸出與各個輸入之間是線性關係 y wx b pytorch定義線性回歸模型 def linreg x,w,b return torch.mm x,w b線性回歸常用損失函式是平方損失 2優化函式 隨機梯度下降 小批量隨機梯度下降 mini batch stochastic gradien...