修改未打包Tensor时的Pytorch错误

whhtz7ly  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(120)

我在修改未打包的Tensor时出错。

import torch
a1, a2 = torch.tensor([1,2], dtype = torch.float64)
b = torch.rand(2, requires_grad = True)

a1 += b.sum()

此代码会产生以下错误:

RuntimeError: A view was created in no_grad mode and is being modified inplace with grad mode enabled. This view is the output of a function that returns multiple views. Such functions do not allow the output views to be modified inplace. You should replace the inplace operation by an out-of-place one.

然而,当我分别创建a1和a2时,我没有收到这个错误,如下所示:

a1 = torch.tensor([1], dtype = torch.float64)
a1 += b.sum()

我不知道为什么解压缩Tensor会导致这个错误。任何帮助都非常感谢

polkgigr

polkgigr1#

错误消息很清楚,并解释说:

  • 您在no_grad mode中创建了两个视图a1和a2,并在grad mode enabled中创建了视图B。
  • 这些函数(解包)不允许就地修改输出视图(a1,a2)(就地操作+=)
    ***解决方法:**将原地操作替换为离位操作。您可以在此操作之前将a1克隆到a,如下所示:
a = a1.clone()
a += b.sum()

这是因为tensor.clone()使用requires_grad字段创建了原始Tensor的副本。因此,你会发现现在abrequires_grad。如果您打印

print(a.requires_grad)        #True
print(b.requires_grad)        #True
print(a1.requires_grad)       #False

您可以阅读更多关于inplace operation 12

相关问题