RuntimeError:勾配計算に必要な変数の1つがインプレースによって変更されました

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が踏んだピットを思い出してください

おすすめ

転載: blog.csdn.net/zzq060143/article/details/88914075