Pytorch版本过高产生的RuntimeError: Legacy autograd function with non-static forward method is deprecated.

博主在使用ECO Lite做视频分类时,因Pytorch版本差异(作者实现基于0.4,自己用1.4),跑模型出现问题。如前向传播的静态方法报错,官方用装饰器的方法不可行,后借鉴SSD网络bug解决措施,修改报错位置并在所有模型前向传播加forward解决问题。

前言

在尝试用ECO Lite做视频分类的时候,使用了作者的Pytorch实现,然而Pytorch实现是基于Pytorch0.4的,我自己的Pytorch版本是1.4,所以在跑模型的时候出现了一些问题,这里记录一下。

问题

  1. 第一个问题就是前向传播的静态方法,报错如下:

RuntimeError: Legacy autograd function with non-static forward method is deprecated. Please use new-style autograd function with static forward method

解决

  1. 第一个问题的解决方法如下:
    – 官方给出的simple是使用@staticmethod装饰器,将forward变为静态方法,但是这样无法使用类和实例的变量,这怎么行呢,没有对象的人不能放弃面向对象,所以放弃。
    – 第二个方法是从SSD网络的bug借鉴过来的,目标检测的SSD pytorch实现也是有同样的问题,但是我不知道什么原理,解决措施如下:

  • 首先,找到报错位置,我这里是在models.py最后加入代码测试的,加入的代码如下:
if __name__ == "__main__":
   from torchsummary import summary
   import time 

   model = TSN(2,12,'scratch','RGB',base_model='ECO',consensus_type='identity', dropout=0.4, partial_bn=not True)
   x = torch.rand([12,3,224,224])
   t1 = time.time()
   with torch.no_grad():
       f
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值