PyTorch Error fix-UserWarning: Legacy autograd function with non-static forward method is deprecate

報錯如下:
UserWarning: Legacy autograd function with non-static forward method is deprecated and will be removed in 1.3. Please use new-style autograd function with static forward method. (Example: https://pytorch.org/docs/stable/autograd.html#torch.autograd.Function)
在這裏插入圖片描述

報錯原因: pytorch版本問題
使用PyTorch編寫代碼的時候,我們通常將模型整合進一個類,在init方法裏聲明模型結構,在forward方法里約定模型裏數據的正向流動,然後PyTorch自動生成數據的方向傳播backward方法。

PyTorch在1.3版本及之後,規定forward方法必須是靜態方法。
違反了該原則的代碼將會在運行時報上述錯誤。

解決方法:

一般的解決辦法是,在forward方法聲明上一行加入@staticmethod裝飾器,即可完成修改。
參考官方給的Example:
在這裏插入圖片描述

但是在一些沒那麼規範的代碼下,這個改進可能會成爲我們的絆腳石。所以有臨時的解決辦法:

  • 方法一:將PyTorch降級到1.2版本及以下,因爲這個改進1.3版本才生效;
  • 方法二:加入代碼忽略掉UserWarning:
import warnings
warnings.filterwarnings("ignore")

(我最後用的臨時方法二,雖然warning其實可以不管它,但是它一直出現在終端裏太煩了,我都看不見每個epoch執行的過程了,哼)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章