起因:
一份很久之前(2018年)的项目代码image caption,今天想重新运行模型测试文件,却出现了如下错误
报错信息:
AttributeError: 'BatchNorm2d' object has no attribute 'track_running_stats'
报错位置:
File "/users4/zsun/pytorch/paper_image_caption/sz-spatial4/modelgru.py", line 33, in forward
A = self.resnet_conv( images ) #//# [batch, 2048, 7, 7]
File "/users4/zsun/anaconda3/lib/python3.6/site-packages/torch/nn/modules/module.py", line 489, in __call__
result = self.forward(*input, **kwargs)
File "/users4/zsun/anaconda3/lib/python3.6/site-packages/torch/nn/modules/container.py", line 92, in forward
input = module(input)
File "/users4/zsun/anaconda3/lib/python3.6/site-packages/torch/nn/modules/module.py", line 489, in __call__
result = self.forward(*input, **kwargs)
File "/users4/zsun/anaconda3/lib/python3.6/site-packages/torch/nn/modules/batchnorm.py", line 75, in forward
self.training or not self.track_running_stats,*****
File "/users4/zsun/anaconda3/lib/python3.6/site-packages/torch/nn/modules/module.py", line 535, in __getattr__
type(self).__name__, name))
AttributeError: 'BatchNorm2d' object has no attribute 'track_running_stats'*****
分析:
注意上面我打上五个星星的位置(*****),可以看到报错的属性'track_running_stats'存在python3.6/site-packages/torch/nn/modules/batchnorm.py文件里,这个文件明显是pytorch的系统文件。
所以怀疑是这两年更新了pytorch版本所致。
原因:
新的pytorch版本(>0.4)有属性'track_running_stats',但我的模型是旧的pytorch版本训练,不具备这个属性
参考博客:
https://blog.youkuaiyun.com/jacke121/article/details/81813146
解决方法:
1. 建立旧版本pytorch虚拟环境,使该程序像原来一样运行。
2. 上文提及的博客中,有使老版本兼容新版本的代码,此处暂时不做验证。
3. 模型load进来,再存出去???待会试试可不可行
决定采用方法2,简单便捷,省却很多未来可能出现的麻烦:
conda create -n imagecap python=3.6
在新的环境中安装自己程序所需要的依赖库(如果有)
最后成功运行