import torch
x_data =
[1.0
,2.0
,3.0
]y_data =
[2.0
,4.0
,6.0
]w = torch.tensor(
[1.0])
# w的初值為1.0
w.requires_grad =
true
# 需要計算梯度
defforward
(x):
return x * w # w是乙個tensor
defloss
(x, y)
: y_pred = forward(x)
return
(y_pred - y)**2
print
("predict (before training)",4
, forward(4)
.item())
for epoch in
range
(100):
for x, y in
zip(x_data, y_data)
: l = loss(x, y)
# l是乙個張量,tensor主要是在建立計算圖 forward, compute the loss
l.backward(
)# backward,compute grad for tensor whose requires_grad set to true
print
('\tgrad:'
, x, y, w.grad.item())
w.data = w.data -
0.01
* w.grad.data # 權重更新時,需要用到標量,注意grad也是乙個tensor
w.grad.data.zero_(
)# after update, remember set the grad to zero
print
('progress:'
, epoch, l.item())
# 取出loss使用l.item,不要直接使用l(l是tensor會構建計算圖)
print
("predict (after training)",4
, forward(4)
.item(
))
y=w*x線性模型,用pytorch實現反向傳播**如下:
import numpy as np
import matplotlib.pyplot as plt
import torch
x_data =
[1.0
,2.0
,3.0
]y_data =
[2.0
,4.0
,6.0
]w = torch.tensor(
[1.0])
#初始權值
w.requires_grad =
true
#計算梯度,預設是不計算的
defforward
(x):
return x * w
defloss
(x,y)
:#構建計算圖
y_pred = forward(x)
return
(y_pred-y)**2
print
('predict (befortraining)',4
,forward(4)
)for epoch in
range
(100):
l = loss(1,
2)#為了在for迴圈之前定義l,以便之後的輸出,無實際意義
for x,y in
zip(x_data,y_data)
: l = loss(x, y)
l.backward(
)print
('\tgrad:'
,x,y,w.grad.item())
w.data = w.data -
0.01
*w.grad.data #注意這裡的grad是乙個tensor,所以要取他的data
w.grad.data.zero_(
)#釋放之前計算的梯度
print
('epoch:'
,epoch,l.item())
print
('predict(after training)',4
,forward(4)
.item(
))
PyTorch深度學習實踐 反向傳播
pytorch深度學習實踐 完結合集 嗶哩嗶哩 bilibili 目錄在之前課程中介紹的線性模型就是乙個最簡單的神經網路的結構,其內部引數的更新過程如下 對於簡單的模型來說可以直接使用表示式的方式來更新權重,但是如果網路結構比較複雜 如下圖 直接使用解析式的方式來更新顯然有些複雜且不太可能實現。反向...
PyTorch深度學習實踐(四) 反向傳播
b站 pytorch深度學習實踐 反向傳播 1 tensor包含data 和 grad w.data w.grad.data 數值計算,不構建計算圖。w.grad.item 取出數值。w.grad.data.zero 清零 2 w是tensor型別,data和grad也是tensor型別,注意取值時...
pytorch 深度學習
pytorch深度學習實踐 訓練集 開發集 模型評估 測試集。f x wx b f x wx b f x w x bloss 乙個樣本 cost mean square error training set 區域性最優,不一定全域性最優。鞍點 梯度為0,但無法繼續迭代。w w c ost ww w ...