Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类型错误:';非类型';对象在丢失时不可删除。在pytorch中向后_Pytorch - Fatal编程技术网

类型错误:';非类型';对象在丢失时不可删除。在pytorch中向后

类型错误:';非类型';对象在丢失时不可删除。在pytorch中向后,pytorch,Pytorch,我正在尝试使用动态图库(DGL)的图卷积网络(GCN)实现一个深度Q网络(DQN)。基本代码取自此。但是,在计算策略网络和目标网络之间的损失并运行loss.backward()后,我得到TypeError:“NoneType”对象不可编辑。我已经打印了损失值,但它不是None 我从存储库中运行了原始代码,它运行得非常完美。我还在DGL中实现了GCN代码,它似乎正在运行。我还使用torchviz可视化了图形,但我无法找到它给出错误的原因 下面给出了代码片段: target=return\u ten

我正在尝试使用动态图库(DGL)的图卷积网络(GCN)实现一个深度Q网络(DQN)。基本代码取自此。但是,在计算策略网络和目标网络之间的损失并运行
loss.backward()
后,我得到
TypeError:“NoneType”对象不可编辑。我已经打印了损失值,但它不是
None

我从存储库中运行了原始代码,它运行得非常完美。我还在DGL中实现了GCN代码,它似乎正在运行。我还使用torchviz
可视化了图形,但我无法找到它给出错误的原因

下面给出了代码片段:

target=return\u tens+self.gamma*torch.max(self.model\u target(observation\u tens,self.G)+observation\u tens*(-1e5),dim=1)[0]
当前值=self.model(最后观察值,self.G)
下一个值=当前值。克隆()
当前_q_值[范围(self.minibatch_长度),操作数,:]=目标
L=自身标准(当前值、下一个值)
打印('损失:',L.项目())
self.optimizer.zero_grad()
L.向后(保留图=真)
self.optimizer.step()
损失:1461729.125

TypeError回溯(最近一次调用)
在()
62
63如果名称=“\uuuuu main\uuuuuuu”:
--->64 main()
7帧
大体上
55打印(“运行单实例模拟…”)
56 my_runner=runner(环境类、代理类、args.verbose)
--->57最终奖励=我的跑步者循环(图dic,args.ngames,args.epoch,args.niter)
58打印(“获得{}的最终奖励”。格式(最终奖励))
59代理_类。保存_模型()
循环中(自我、图形、游戏、nbr_epoch、max_iter)
45#如果self.verbose:
46#打印(“模拟步骤{}:.format(i))
--->47(obs,act,rew,done)=self.step()
48行动清单。附加(行动)
49
步调一致(自我)
16#奖励=火炬。张量([奖励],装置=装置)
17
--->18自我激励奖励(观察、行动、奖励、完成)
19
20返回(观察、行动、奖励、完成)
奖励(自我、观察、行动、奖励、完成)
129打印('损失:',L.项目())
130 self.optimizer.zero_grad()
-->131 L.向后(保留图=真)
132 self.optimizer.step()
133
/usr/local/lib/python3.6/dist-packages/torch/tensor.py in backward(self、gradient、retain\u图、create\u图)
148种产品。默认值为“False”。
149         """
-->150火炬。自动标记。向后(自我、梯度、保留图、创建图)
151
152 def寄存器挂钩(自身,挂钩):
/usr/local/lib/python3.6/dist packages/torch/autograd/________.py向后(张量、梯度张量、保留图、创建图、梯度变量)
97变量。\u执行\u引擎。向后运行\u(
98张量,梯度张量,保留图,创建图,
--->99 allow_unreachable=True)#allow_unreachable标志
100
101
/应用中的usr/local/lib/python3.6/dist-packages/torch/autograd/function.py(self,*args)
75
76 def应用(自身,*参数):
--->77返回self.\u向前\u cls.向后(self,*args)
78
79
/usr/local/lib/python3.6/dist-packages/dgl/backend/pytorch/tensor.py反向输入(ctx,渐变输出)
394 def向后(ctx,渐变输出):
395减速机,图形,目标,输入映射,输出映射,输入数据,输出数据,degs\
-->396=ctx.backward\u缓存
397 ctx.backward\u缓存=无
398梯度=无
TypeError:“非类型”对象不可编辑

更新:通过在主分支上从源代码构建解决问题。 查看此文件了解详细信息

因此,在DGL中生成随机图的玩具数据集时,我遇到了同样的问题。对于每个图,我使用
G.update_all(fn.copy_e('msg')、fn.sum('msg')、'c'))
target=DGL.sum_节点(G,'c')
。调用
loss.backward()
时,我得到了与您相同的错误

我通过在创建
DataLoader
对象的周围添加
torch.no_grad()
修复了这个问题,因此
loss.backward()
不会调用
target
中的
backward()
函数,其中
ctx.backward\u缓存=None
,当
copyruce()的
向前()
函数
在此之前未调用中的类

我不确定我的修正是否直接适用于您的问题,但您应该检查在此之前是否有向后传递而没有向前传递,或者损失函数中的张量在图中引用相同的计算,从而调用
backward()
两次


我希望这能有所帮助。

更新:通过在主分支上从源代码构建解决问题。 查看此文件了解详细信息

因此,在DGL中生成随机图的玩具数据集时,我遇到了同样的问题。对于每个图,我使用
G.update_all(fn.copy_e('msg')、fn.sum('msg')、'c'))
target=DGL.sum_节点(G,'c')
。调用
loss.backward()
时,我得到了与您相同的错误

我通过在创建
DataLoader
对象的周围添加
torch.no_grad()
修复了这个问题,因此
loss.backward()
不会调用
target
中的
backward()
函数,其中
ctx.backward\u缓存=None
,当
copyruce()的
向前()
函数
在此之前未调用中的类

我不确定我的修正是否直接适用于你的问题,但你应该检查你是否有一个没有forwa的向后传球
TypeError                                 Traceback (most recent call last)
<ipython-input-17-cd5e862dd609> in <module>()
     62 
     63 if __name__ == "__main__":
---> 64     main()

7 frames
<ipython-input-17-cd5e862dd609> in main()
     55         print("Running a single instance simulation...")
     56         my_runner = Runner(env_class, agent_class, args.verbose)
---> 57         final_reward = my_runner.loop(graph_dic,args.ngames,args.epoch, args.niter)
     58         print("Obtained a final reward of {}".format(final_reward))
     59         agent_class.save_model()

<ipython-input-14-45cfc883a37b> in loop(self, graphs, games, nbr_epoch, max_iter)
     45                         # if self.verbose:
     46                         #   print("Simulation step {}:".format(i))
---> 47                         (obs, act, rew, done) = self.step()
     48                         action_list.append(act)
     49 

<ipython-input-14-45cfc883a37b> in step(self)
     16         #reward = torch.tensor([reward], device=device)
     17 
---> 18         self.agent.reward(observation, action, reward,done)
     19 
     20         return (observation, action, reward, done)

<ipython-input-16-76d612e8663c> in reward(self, observation, action, reward, done)
    129               print('loss:',L.item())
    130               self.optimizer.zero_grad()
--> 131               L.backward(retain_graph=True)
    132               self.optimizer.step()
    133 

/usr/local/lib/python3.6/dist-packages/torch/tensor.py in backward(self, gradient, retain_graph, create_graph)
    148                 products. Defaults to ``False``.
    149         """
--> 150         torch.autograd.backward(self, gradient, retain_graph, create_graph)
    151 
    152     def register_hook(self, hook):

/usr/local/lib/python3.6/dist-packages/torch/autograd/__init__.py in backward(tensors, grad_tensors, retain_graph, create_graph, grad_variables)
     97     Variable._execution_engine.run_backward(
     98         tensors, grad_tensors, retain_graph, create_graph,
---> 99         allow_unreachable=True)  # allow_unreachable flag
    100 
    101 

/usr/local/lib/python3.6/dist-packages/torch/autograd/function.py in apply(self, *args)
     75 
     76     def apply(self, *args):
---> 77         return self._forward_cls.backward(self, *args)
     78 
     79 

/usr/local/lib/python3.6/dist-packages/dgl/backend/pytorch/tensor.py in backward(ctx, grad_out)
    394     def backward(ctx, grad_out):
    395         reducer, graph, target, in_map, out_map, in_data_nd, out_data_nd, degs \
--> 396             = ctx.backward_cache
    397         ctx.backward_cache = None
    398         grad_in = None

TypeError: 'NoneType' object is not iterable