Pytorch autograd因" RuntimeError失败:差分输入无法访问"收集输入后

时间:2018-05-16 01:20:13

标签: python pytorch gradients autograd

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:区分输入无法访问

当然这是有道理的 - 在f的声明中没有明确使用w。但是,我想要一种行为,其中一行代码可以生成类似[1; 1; 1]的输出。

假设我想方便地将我的变量一起批量处理,然后立即采用整个shebang的梯度,而不是独立处理变量(这可能使簿记成为一场噩梦)。有没有办法得到我想要的结果?

1 个答案:

答案 0 :(得分:0)

这样的事情是否有用,或者你想保留f = x + y + z

w = torch.cat([x, y, z])
f = w[0] + w[1] + w[2]
print (ag.grad(f, w, retain_graph=True, create_graph=True))

# output (tensor([[ 1.],[ 1.],[ 1.]]),)