Pytorch學習記錄(二) 關於Gradient

2021-08-28 20:02:17 字數 1811 閱讀 5040

在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值。只...