![](/img/trans.png)
[英]Is there any option at Pytorch autograd function for these problem?
[英]Is there any essential difference between * and + for Pytorch autograd?
我試圖更深入地了解 autograd 機制。 為了測試我的理解,我嘗試編寫以下我預計會產生錯誤的代碼(即,再次嘗試向后查看圖形)。
b = torch.Tensor([0.5])
for i in range(5):
b.data.zero_().add_(0.5)
b = b + a
c = b*a
c.backward()
顯然,在for循環中第二次調用c.backward()
時應該會報錯,因為b的history已經被釋放了,但是沒有任何反應。
但是當我嘗試將 b + a 更改為 b * a 時,
b = torch.Tensor([0.5])
for i in range(5):
b.data.zero_().add_(0.5)
b = b * a
c = b*a
c.backward()
它確實報告了我期望的錯誤。 這對我來說看起來很奇怪。 我不明白為什么前一種情況沒有引起錯誤,以及為什么從 + 更改為 * 會有所不同。
不同之處在於添加一個常量不會改變梯度,但 mull by const 會。 看來,autograd 意識到了這一點,並優化了 'b = b + a'。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.