Python 梯度计算所需的一个变量已通过就地操作进行修改:
我试图用pytorch 1.5在深层确定性策略梯度算法中计算策略目标网络的丢失,我得到以下错误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
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在为特定的就地操作创建计算图时遇到了困难 这是目前的限制