Python 梯度计算所需的一个变量已通过就地操作进行修改:

Python 梯度计算所需的一个变量已通过就地操作进行修改:,python,pytorch,reinforcement-learning,Python,Pytorch,Reinforcement Learning,我试图用pytorch 1.5在深层确定性策略梯度算法中计算策略目标网络的丢失,我得到以下错误 File "F:\agents\ddpg.py", line 128, in train_model policy_loss.backward() File "E:\conda\envs\pytorch\lib\site-packages\torch\tensor.py", line 198, in backward torch.autogr

我试图用pytorch 1.5在深层确定性策略梯度算法中计算策略目标网络的丢失,我得到以下错误

File "F:\agents\ddpg.py", line 128, in train_model
    policy_loss.backward()
  File "E:\conda\envs\pytorch\lib\site-packages\torch\tensor.py", line 198, in backward
    torch.autograd.backward(self, gradient, retain_graph, create_graph)
  File "E:\conda\envs\pytorch\lib\site-packages\torch\autograd\__init__.py", line 100, 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, 1]], 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).

还有我的人际网络和培训进度。在参与者网络中,输出向量的长度是20,这意味着一个连续动作。批评家网络的输入由状态向量和动作向量组成

ddpg演员 类别MLPnn.模块: 定义初始自我, 输入大小, 输出单位大小, 输出限制=1.0, 隐藏大小=64,64, 激活=torch.relu, 输出\激活=标识, 使用输出层=真, 使用_actor=False, : 超人,自我__ self.input\u size=输入大小 self.output\u size=输出大小 self.output\u limit=输出\u limit self.hidden\u size=隐藏的大小 自我激活 self.output_activation=输出_activation self.use\u output\u layer=使用\u output\u layer self.use\u actor=use\u actor 设置隐藏层 self.hidden_layers=nn.ModuleList 输入大小=自输入大小 对于self.hidden_大小中的下一个_大小: fc=nn.Linearin\u大小,下一个\u大小 in_size=下一个_size self.hidden_layers.appendfc 设置输出层 如果self.use\u输出\u层: self.output\u layer1=nn.Linearin\u size,self.output\u size//2 self.output\u layer2=nn.Linearin\u size,self.output\u size//2 其他: self.output\u layer=标识 def forwardself,x: 对于self.hidden_层中的隐藏_层: x=自激活隐藏层x x1=torch.SIGMODSELF.output\U layer1x x2=F.softmaxself.output\u layer2x,尺寸=0 输出=火炬。catx1,x2,尺寸=-1 如果网络用作参与者网络,请确保输出在正确的范围内 out=out*self.output\u如果self.use\u超出限制 返回 DDPG评论家、TD3评论家、SAC qf、TAC qf 类。模块: 定义初始自我, 输入大小, 输出单位大小, 输出限制=1.0, 隐藏大小=64,64, 激活=torch.relu, 输出\激活=标识, 使用输出层=真, 使用_actor=False, : 超级__ self.input\u size=输入大小 self.output\u size=输出大小 self.output\u limit=输出\u limit self.hidden\u size=隐藏的大小 自我激活 self.output_activation=输出_activation self.use\u output\u layer=使用\u output\u layer self.use\u actor=use\u actor 设置隐藏层 self.hidden_layers=nn.ModuleList 输入大小=自输入大小 对于self.hidden_大小中的下一个_大小: fc=nn.Linearin\u大小,下一个\u大小 in_size=下一个_size self.hidden_layers.appendfc 设置输出层 如果self.use\u输出\u层: self.output\u layer=nn.Linearin\u size,self.output\u size 其他: self.output\u layer=标识 def forwardself,x,a: q=火炬。类别[x,a],尺寸=1 对于self.hidden_层中的隐藏_层: q=自激活隐藏层q q=火炬.tanhself.output\u layerq 返回q def列_modelself: 批处理=self.replay\u buffer.sampleself.batch\u大小 obs1=批次['obs1'] obs2=批次['obs2'] acts=批次['acts'] rews=批次['rews'] 完成=批处理[“完成”] 检查经验的形状
预测Qs,只需尝试避免特定的就地操作,并将其转换为非就地操作

我看到过一些案例,已经证实PyTorch反向模式AD在为特定的就地操作创建计算图时遇到了困难


这是当前的限制。

请尽量避免特定的就地操作,并将其转换为非就地操作

我看到过一些案例,已经证实PyTorch反向模式AD在为特定的就地操作创建计算图时遇到了困难

这是目前的限制