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执行的过程了,哼)

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