您好,登錄后才能下訂單哦!
怎么分析PyTorch中的知識點,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
總結:
按照慣例,所有屬性requires_grad=False的張量是葉子節點(即:葉子張量、 葉子節點張量). 對于屬性requires_grad=True的張量可能是葉子節點張量也可能不是葉 子節點張量而是中間節點(中間節點張量). 如果該張量的屬性requires_grad=True, 而且是用于直接創建的,也即它的屬性grad_fn=None,那么它就是葉子節點. 如果該張量的屬性requires_grad=True,但是它不是用戶直接創建的,而是由其他張量 經過某些運算操作產生的,那么它就不是葉子張量,而是中間節點張量,并且它的屬性 grad_fn不是None,比如:grad_fn=<MeanBackward0>,這表示該張量是通過torch.mean() 運算操作產生的,是中間結果,所以是中間節點張量,所以不是葉子節點張量. 判斷一個張量是不是葉子節點,可以通過它的屬性is_leaf來查看. 一個張量的屬性requires_grad用來指示在反向傳播時,是否需要為這個張量計算梯度. 如果這個張量的屬性requires_grad=False,那么就不需要為這個張量計算梯度,也就 不需要為這個張量進行優化學習. 在PyTorch的運算操作中,如果參加這個運算操作的所有輸入張量的屬性requires_grad都 是False的話,那么這個運算操作產生的結果,即輸出張量的屬性requires_grad也是False, 否則是True. 即輸入的張量只要有一個需要求梯度(屬性requires_grad=True),那么得到的 結果張量也是需要求梯度的(屬性requires_grad=True).只有當所有的輸入張量都不需要求 梯度時,得到的結果張量才會不需要求梯度. 對于屬性requires_grad=True的張量,在反向傳播時,會為該張量計算梯度. 但是pytorch的 自動梯度機制不會為中間結果保存梯度,即只會為葉子節點計算的梯度保存起來,保存到該 葉子節點張量的屬性grad中,不會在中間節點張量的屬性grad中保存這個張量的梯度,這是 出于對效率的考慮,中間節點張量的屬性grad是None.如果用戶需要為中間節點保存梯度的 話,可以讓這個中間節點調用方法retain_grad(),這樣梯度就會保存在這個中間節點的grad屬性中.
看完上述內容,你們掌握怎么分析PyTorch中的知識點的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。