【发布时间】:2023-04-11 02:37:01
【问题描述】:
我正在尝试了解 pytorch 以及 autograd 在其中的工作原理。我尝试通过用其他张量的值填充它然后检查梯度来创建一个张量。但是,如果我不将requires_grad 设置为等于False,我会遇到RuntimeError: leaf variable has been moved into the graph interior。
代码:
x = torch.ones(3,5,requires_grad=True)
y = x+2
z = y*y*3
out1 = z.mean()
out2 = 2*z.mean()
outi = torch.empty(2,requires_grad=True)
outi[0] = out1
outi[1] = out2
outi.backward(torch.tensor([0.,1.]))
输出:
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
<ipython-input-22-1000fc52a64c> in <module>
13 outi[1] = out2
14
---> 15 outi.backward(torch.tensor([0.,1.]))
~/anaconda3/envs/pytorch/lib/python3.8/site-packages/torch/tensor.py in backward(self, gradient, retain_graph, create_graph)
183 products. Defaults to ``False``.
184 """
--> 185 torch.autograd.backward(self, gradient, retain_graph, create_graph)
186
187 def register_hook(self, hook):
~/anaconda3/envs/pytorch/lib/python3.8/site-packages/torch/autograd/__init__.py in backward(tensors, grad_tensors, retain_graph, create_graph, grad_variables)
123 retain_graph = create_graph
124
--> 125 Variable._execution_engine.run_backward(
126 tensors, grad_tensors, retain_graph, create_graph,
127 allow_unreachable=True) # allow_unreachable flag
RuntimeError: leaf variable has been moved into the graph interior
但是,我可以将 requires_grad 更改为 False,它会正常工作
x = torch.ones(3,5,requires_grad=True)
y = x+2
z = y*y*3
out1 = z.mean()
out2 = 2*z.mean()
outi = torch.empty(2,requires_grad=False)
outi[0] = out1
outi[1] = out2
outi.backward(torch.tensor([0.,1.]))
输出:
empty. it worked
有人可以帮我了解幕后发生的事情,以及将 require_grad 设置为 True 导致这种行为发生了什么变化吗?感谢阅读
【问题讨论】:
标签: pytorch