【问题标题】:PyTorch one of the variables needed for gradient computation has been modified by an inplace operationPyTorch 梯度计算所需的变量之一已通过就地操作进行了修改
【发布时间】:2021-05-16 12:57:01
【问题描述】:

我在 PyTorch 中做一个策略梯度方法。我想将网络更新移动到循环中,但它停止了工作。我仍然是 PyTorch 新手,如果解释很明显,我很抱歉。

这是有效的原始代码:

self.policy.optimizer.zero_grad()
G = T.tensor(G, dtype=T.float).to(self.policy.device) 

loss = 0
for g, logprob in zip(G, self.action_memory):
    loss += -g * logprob
                                 
loss.backward()
self.policy.optimizer.step()

变化之后:

G = T.tensor(G, dtype=T.float).to(self.policy.device) 

loss = 0
for g, logprob in zip(G, self.action_memory):
    loss = -g * logprob
    self.policy.optimizer.zero_grad()
                                 
    loss.backward()
    self.policy.optimizer.step()

我得到错误:

File "g:\VScode_projects\pytorch_shenanigans\policy_gradient.py", line 86, in learn
    loss.backward()
  File "G:\Anaconda3\envs\pytorch_env\lib\site-packages\torch\tensor.py", line 185, in backward
    torch.autograd.backward(self, gradient, retain_graph, create_graph)
  File "G:\Anaconda3\envs\pytorch_env\lib\site-packages\torch\autograd\__init__.py", line 127, in backward
    allow_unreachable=True)  # allow_unreachable flag
RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation: [torch.cuda.FloatTensor [128, 4]], which is output 0 of TBackward, is at version 2; expected version 1 instead. Hint: enable anomaly detection to find the operation that failed to compute its gradient, with torch.autograd.set_detect_anomaly(True).

我读到这个 ​​RuntimeError 通常与必须克隆某些东西有关,因为我们使用与 compute itself 相同的张量,但我无法确定我的情况有什么问题。

【问题讨论】:

    标签: python pytorch


    【解决方案1】:

    这行 loss += -g * logprob 是您的问题所在。

    改成这样:

    loss = loss + (-g * logprob)
    

    是的,它们是不同的。它们执行相同的操作,但方式不同。

    【讨论】:

    • 但是这一行的代码可以工作。有问题的是下面的另一个 sn-p。
    猜你喜欢
    • 2020-12-26
    • 2021-11-04
    • 2021-03-04
    • 2021-03-22
    • 2019-12-29
    • 2020-09-15
    • 2019-05-10
    • 2020-11-11
    • 2020-08-25
    相关资源
    最近更新 更多