Traceback (most recent call last):
File "train.py", line 182, in <module>
train(config)
File "train.py", line 120, in train
loss.backward()
File "/home/zqzhu/anaconda3/lib/python3.7/site-packages/torch/tensor.py", line 102, in backward
torch.autograd.backward(self, gradient, retain_graph, create_graph)
File "/home/zqzhu/anaconda3/lib/python3.7/site-packages/torch/autograd/__init__.py", line 90, in backward
allow_unreachable=True) # allow_unreachable flag
RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation
最初に、このエラーの理由について説明します。損失を計算するときに新しい項目が追加され、次のように記述されました。
loss += new_loss
エラー分析:pytorchがpytorch0.4にアップグレードされた後、pytorch0.3の使用法にいくつかの変更が発生しました。たとえば、最も重要なことは、pytorch0.4でTensorとVarianceを組み合わせることです。同様に、pytorch0.4はインプレース操作をサポートしなくなりました。
解決策:
1.すべてのinplace=True
変更inplace=False
2. loss+=new_loss
すべての+=
操作をloss=loss+new_loss
3. pytorchフォールバックバージョン0.3に変更するか、conda環境のpytorch0.3を追加します。
参考資料:
PyTorchが踏んだピットを思い出してください