Pytorch 線性回歸問題

2021-10-09 21:19:16 字數 3189 閱讀 8901

# y=4+3x+高斯雜訊

我們利用線性回歸原理,假設y=wx+b, 利用梯度下降法,去求解w,b。驗證w,b是否比較接近w=3,b=4

# 計算loss_function函式

'''loss = sum(y-(w*x+b))**2

'''#定義loss_functiondef computre_error_loss_function(b, w, x, y): totalerror = 0 # 初始error設定為0

for i in

range(0

,len

(x))

: x = x[i]

y = y[i]

totalerror = totalerror +

(y -

(w*x+b))**

2#計算所有樣本的error

return totalerror/

float

(len

(x))

#返回平均error

def

compute_grad

(b_cal, w_cal, x,y, learn_rate)

: b_grad =

0#初始b的導數值

w_grad =

0#初始w的導數值

n =float

(len

(x))

for i in

range(0

,len

(x))

: x,y = x[i]

,y[i]

b_grad =-(

2/n)

*(y-

((w_cal*x)

+ b_cal)

)+ b_grad #對b求導公式

w_grad =-(

2/n)

*x*(y-

((w_cal*x)

+b_cal)

)+ w_grad #對w求導公式

new_b = b_cal-

(learn_rate*b_grad)

#梯度更新

new_w = w_cal-

(learn_rate*w_grad)

#梯度更新

return

[new_b, new_w]

#返回引數權值

# 執行每個樣本的梯度更新

defgd_runner

(x,y,starting_b,starting_w,learn_rate, num_iter)

: b = starting_b

w = starting_w

for i in

range

(num_iter)

: b,w = compute_grad(b,w, x,y, learn_rate)

return

[b,w]

def

run():

#設定超引數

learn_rate =

0.001

# 設定學習率

init_b =

0#初始值

init_w =

0 num_iter =

100000

#設定迭代次數

print

('初始梯度引數:b=,w=,error ='

.format

(init_b,init_w,computre_error_loss_function(init_b,init_w,x,y)))

print

('runing...'

)[b,w]

= gd_runner(x,y,init_b,init_w, learn_rate, num_iter)

print

('迭代次數:iter=,b=,w=,error='

從圖6的結果來看,b=4.16,w=2.81,error=1.14,即使用梯度下降法求得 y=4.14+2.81*x,

這與原先的y=4+3*x+隨機雜訊(圖2公式)的函式比較接近。

關聯知識點:

pytorch_線性回歸問題

線性回歸的原理及其實現

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