報錯如下:
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執行的過程了,哼)