Pytorch 版本 0.3.1
编辑:我正在重写这个问题以使其更简单,因为我已经缩小了错误的范围。
我有一些变量:
x = ag.Variable(torch.ones(1, 1), requires_grad = True)
y = ag.Variable(torch.ones(1, 1), requires_grad = True)
z = ag.Variable(torch.ones(1, 1), requires_grad = True)
然后我创建一个表示它们连接的变量:
w = torch.cat([x, y, z])
f = x + y + z
然后我尝试取导数:
ag.grad(f, x, retain_graph=True, create_graph=True)
这很好,并按预期返回 1。y 和 z 相同。
然而,
ag.grad(f, w, retain_graph=True, create_graph=True)
返回一个错误:RuntimeError: distinct input is unreachable
当然,这是有道理的—— w 没有在 . 的声明中明确使用f
。但是,我想要一种行为,其中一行代码可以生成类似[1; 1; 1]
输出的东西。
假设我想方便地将我的变量批处理在一起,然后一次获取整个 shebang 的梯度,而不是独立处理变量(这会使簿记成为一场噩梦)。有什么办法可以得到我想要的结果吗?