就一个前向推理,也报错了。。。
代码:
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/