gpt4 book ai didi

python - 关于 PyTorch 中函数 "tensor.backward()"的简单但令人不安的问题

转载 作者:行者123 更新时间:2023-12-01 05:51:30 27 4
gpt4 key购买 nike

这些天我正在学习 PyTorch 和 backward()功能真的让我很困惑。
让我们直接进入我的问题:

我定义了一些张量和操作:

``

import torch
x = torch.ones(2,5,requires_grad=True)
y = x + 2
z = x*x
Y = torch.mean(y)
Z = torch.mean(z)

``

如果我运行这个:
y.backward(torch.ones(2,5))
z.backward(torch.ones(2,5))

没有发生错误。

但是,如果我运行这个:
Y.backward()
Z.backward()

我有:
    RuntimeError                              Traceback (most recent call last)
<ipython-input-7-732c4cd53ca7> in <module>()
1 Y.backward()
----> 2 Z.backward()

E:\learningsoft\anadonda\lib\site-packages\torch\tensor.py in backward(self, gradient, retain_graph, create_graph)
91 products. Defaults to ``False``.
92 """
---> 93 torch.autograd.backward(self, gradient, retain_graph, create_graph)
94
95 def register_hook(self, hook):

E:\learningsoft\anadonda\lib\site-packages\torch\autograd\__init__.py in backward(tensors, grad_tensors, retain_graph, create_graph, grad_variables)
88 Variable._execution_engine.run_backward(
89 tensors, grad_tensors, retain_graph, create_graph,
---> 90 allow_unreachable=True) # allow_unreachable flag
91
92

RuntimeError: Trying to backward through the graph a second time, but the buffers have already been freed. Specify retain_graph=True when calling backward the first time.

谁能告诉我 为什么他们有不同的结果?

让我举更多的例子:
example1(picture)

最佳答案

这是您运行命令的顺序。

首先你向后跑 yz .然后你在 Y 上运行它和 Z , 但是 YZ均基于 yz - 已经向后运行了。

您需要在 y 上向后运行和 z然后重置内核,然后重做计算并在 Y 上向后运行和 Z .

x = torch.ones(2,5,requires_grad=True)
y = x + 2
z = x*x
Y = torch.mean(y)
Z = torch.mean(z)
y.backward(torch.ones(2,5))
z.backward(torch.ones(2,5))

然后复位。
x = torch.ones(2,5,requires_grad=True)
y = x + 2
z = x*x
Y = torch.mean(y)
Z = torch.mean(z)
Y.backward()
Z.backward()

关于python - 关于 PyTorch 中函数 "tensor.backward()"的简单但令人不安的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53578605/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com