当前位置: 代码迷 >> 综合 >> pytorch高版本(如1.7.0)RuntimeError: Legacy autograd function with non-static forward method is deprecate
  详细解决方案

pytorch高版本(如1.7.0)RuntimeError: Legacy autograd function with non-static forward method is deprecate

热度:97   发布时间:2023-12-15 16:03:58.0

就一个前向推理,也报错了。。。

代码:

from torchvision import models
model = models.vgg19(pretrained=True)
output = model(input.cuda())

报错:

RuntimeError: Legacy autograd function with non-static forward method is deprecated.

完整报错:

Traceback (most recent call last):File "/home/user1/pjs/frvt_pytorch/batch_run/2branch_alter_1update_2pfc_MMD_ori_auto/recognition/arcface_torch/tools/visualize.py", line 373, in <module>gb = gb_model(input, index=target_index)File "/home/user1/pjs/frvt_pytorch/batch_run/2branch_alter_1update_2pfc_MMD_ori_auto/recognition/arcface_torch/tools/visualize.py", line 192, in __call__output = self.forward(input.cuda())File "/home/user1/pjs/frvt_pytorch/batch_run/2branch_alter_1update_2pfc_MMD_ori_auto/recognition/arcface_torch/tools/visualize.py", line 188, in forwardreturn self.model(input)File "/home/user1/miniconda3/envs/py377/lib/python3.7/site-packages/torch/nn/modules/module.py", line 727, in _call_implresult = self.forward(*input, **kwargs)File "/home/user1/miniconda3/envs/py377/lib/python3.7/site-packages/torchvision/models/vgg.py", line 43, in forwardx = self.features(x)File "/home/user1/miniconda3/envs/py377/lib/python3.7/site-packages/torch/nn/modules/module.py", line 727, in _call_implresult = self.forward(*input, **kwargs)File "/home/user1/miniconda3/envs/py377/lib/python3.7/site-packages/torch/nn/modules/container.py", line 117, in forwardinput = module(input)File "/home/user1/miniconda3/envs/py377/lib/python3.7/site-packages/torch/autograd/function.py", line 160, in __call__"Legacy autograd function with non-static forward method is deprecated. "
RuntimeError: Legacy autograd function with non-static forward method is deprecated. Please use new-style autograd function with static forward method. (Example: https://pytorch.org/docs/stable/autograd.html#torch.autograd.Function)Process finished with exit code 1

原因:高版本pytorch代码要求写法不一样,产生了兼容性问题吧。

解决:网上的各种说加 staticmethod、集成torch.autograd.Function,apply调用等等都不管用
这里的解决是:
推理过程中涉及到 model(input)形式的改为model.forward(input)形式,加一个forward

代码改成:

from torchvision import models
model = models.vgg19(pretrained=True)
output = model.forward(input.cuda())

另外:/home/xxx/miniconda3/envs/py377/lib/python3.7/site-packages/torch/nn/modules/container.py 中的 117 行:

            input = module(input)

也改为:

            input = module.forward(input)

参考:https://www.pythonheidong.com/blog/article/764153/6219b3a9423dea894603/

  相关解决方案