簡體   English   中英

Pytorch autograd 的 * 和 + 之間有什么本質區別嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM