修改解压缩张量时出现 Pytorch 错误
Pytorch error when modifying unpacked 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()
我不知道为什么解包张量会导致该错误。非常感谢任何帮助
错误消息很清楚,并解释说:
您在 no_grad mode
中创建了两个视图 a1 和 a2,在 grad mode enabled
中创建了视图 b。
此类函数(解包)不允许就地修改输出视图(a1,a2)(就地操作+=)
解决方法: 你应该用 out-of-place 替换 inplace 操作。您可以在此操作之前将 a1
克隆到 a
,如下所示:
a = a1.clone()
a += b.sum()
这是因为 tensor.clone() 使用 requires_grad
字段创建了原始张量的副本。因此,你会发现现在 a
和 b
有 requires_grad
。如果你打印
print(a.requires_grad) #True
print(b.requires_grad) #True
print(a1.requires_grad) #False
我在修改解压缩的张量时出错。
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()
我不知道为什么解包张量会导致该错误。非常感谢任何帮助
错误消息很清楚,并解释说:
您在
no_grad mode
中创建了两个视图 a1 和 a2,在grad mode enabled
中创建了视图 b。此类函数(解包)不允许就地修改输出视图(a1,a2)(就地操作+=)
解决方法: 你应该用 out-of-place 替换 inplace 操作。您可以在此操作之前将
a1
克隆到a
,如下所示:a = a1.clone() a += b.sum()
这是因为 tensor.clone() 使用 requires_grad
字段创建了原始张量的副本。因此,你会发现现在 a
和 b
有 requires_grad
。如果你打印
print(a.requires_grad) #True
print(b.requires_grad) #True
print(a1.requires_grad) #False