在bp的時候,pytorch是將variable的梯度放在variable物件中的,我們隨時都可以使用variable.grad得到對應variable的grad。剛建立variable的時候,它的grad屬性是初始化為0.0的。
>>
>
import torch
>>
>
from torch.autograd import variable
>>
> w1 = variable(torch.tensor(
[1.0
,2.0
,3.0])
,requires_grad=
true
)#需要求導的話,requires_grad=true屬性是必須的。
>>
> w2 = variable(torch.tensor(
[1.0
,2.0
,3.0])
,requires_grad=
true
)>>
>
print
(w1.grad)
>>
>
print
(w2.grad)
variable containing:
[torch.floattensor of size 3]
variable containing:
[torch.floattensor of size 3
]
從下面這兩段**可以看出,使用d.backward()求variable的梯度的時候,variable.grad是累加的即: variable.grad=variable.grad+new_grad
>>
> d = torch.mean(w1)
>>
> d.backward(
)>>
> w1.grad
variable containing:
0.3333
0.3333
0.3333
[torch.floattensor of size 3
]>>
> d.backward(
)>>
> w1.grad
variable containing:
0.6667
0.6667
0.6667
[torch.floattensor of size 3
]
既然累加的話,那我們如何置零呢?
>>
> w1.grad.data.zero_(
)>>
> w1.grad
variable containing:
[torch.floattensor of size 3
]
# 獲得梯度後,如何更新
learning_rate =
0.1#w1.data -= learning_rate * w1.grad.data 與下面式子等價
w1.data.sub_(learning_rate*w1.grad.data)
# w1.data是獲取儲存weights的tensor
這裡更新的時候為什麼要用tensor更新,為什麼不直接用variable?
variable更多是用在feedforward中的,因為feedforward是需要記住各個tensor之間聯絡的,這樣,才能正確的bp。tensor不會記錄路徑。而且,如果使用variable操作的話,就會造成迴圈圖了(猜測)。
GIT 學習筆記(二) 關於修改
git checkout file可以丟棄工作區的修改 git reset head可以把暫存區修改撤銷掉 unstage 重新放回工作區 運用版本回退的方法 git log可以檢視提交歷史,以便確定要回退到哪個版本,再使用git reset hard commit id回退到想要的版本 用rm命令...
Linux學習(二)關於檔案基本操作
兩層規範 1 下面各個目錄存放什麼檔案資料?etc 存設定檔案 bin sbin 存可執行檔案 2 針對 usr var子目錄定義 var log usr share 2 fhs標準文件 3 目錄路徑 cd 切換目錄 表示當前目錄 上一級目錄 ls a 檢視隱藏檔案 上一次所在目錄 當前使用者hom...
Pytorch學習記錄筆記
輸出 函式會返回兩個tensor,第乙個tensor是每行的最大值,softmax的輸出中最大的是1,所以第乙個tensor是全1的tensor 第二個tensor是每行最大值的索引。predicted torch.max outputs.data,1 下劃線表示不在乎返回的第乙個tensor值。只...