gpt4 book ai didi

python - 为什么 pytorch 不允许对叶变量进行就地操作?

转载 作者:行者123 更新时间:2023-12-04 04:07:59 26 4
gpt4 key购买 nike

因此,如果我在 Pytorch 中运行此代码:

x = torch.ones(2,2, requires_grad=True)
x.add_(1)

我会得到错误:

RuntimeError: a leaf Variable that requires grad is being used in an in-place operation.



我知道 Pytorch 不允许对叶变量进行就地操作,我也知道有办法绕过这个限制。我不明白的是这条规则背后的哲学。为什么用就地操作更改叶变量是错误的?

最佳答案

据我了解,任何时候您对使用 requires_grad=True 初始化的张量进行非传统操作时, Pytorch 抛出一个错误以确保它是故意的。例如,您通常只会使用 optimizer.step() 更新权重张量。 .
再举一个例子,我在网络初始化期间尝试更新可反向传播的张量中的值时遇到了这个问题。

self.weight_layer = nn.Parameter(data=torch.zeros(seq_length), requires_grad=True)
self.weight_layer[true_ids == 1] = -1.2
RuntimeError: a leaf Variable that requires grad is being used in an in-place operation.
问题是,因为 requires_grad=True ,网络不知道我还在初始化这些值。如果这是您要执行的操作,请将更新包装在 torch.no_grad 中块是一种解决方案:
with torch.no_grad()
self.weight_layer = nn.Parameter(data=torch.zeros(seq_length), requires_grad=True)
self.weight_layer[true_ids == 1] = -1.2
否则,您可以设置 requires_grad=True完成张量初始化后:
self.weight_layer = nn.Parameter(data=torch.zeros(seq_length))
self.weight_layer[true_ids == 1] = -1.2
self.weight_layer.requires_grad = True

关于python - 为什么 pytorch 不允许对叶变量进行就地操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62198351/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com