起因:
一份很久之前(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.csdn.net/jacke121/article/details/81813146
解決方法:
1. 建立舊版本pytorch虛擬環境,使該程序像原來一樣運行。
2. 上文提及的博客中,有使老版本兼容新版本的代碼,此處暫時不做驗證。
3. 模型load進來,再存出去???待會試試可不可行
決定採用方法2,簡單便捷,省卻很多未來可能出現的麻煩:
conda create -n imagecap python=3.6
在新的環境中安裝自己程序所需要的依賴庫(如果有)
最後成功運行