1

代码:

a = T.vector()
b = T.vector()

loss = T.sum(a-b)

dy = T.grad(loss, a)
d2y = T.grad(loss, dy)

f = theano.function([a,b], y)
print f([.5,.5,.5], [1,0,1])

输出:

theano.gradient.DisconnectedInputError: grad method was asked to compute
the gradientwith respect to a variable that is not part of the
computational graph of the cost, or is used only by a non-differentiable
operator: Elemwise{second}.0

图的导数怎么不是图的一部分?这就是为什么使用扫描来计算粗麻布的原因吗?

4

1 回答 1

1

这里:

d2y = T.grad(loss, dy)

您正在尝试计算相对于 的损失梯度dy。然而,损失仅取决于aandb和 not的值dy,因此是误差。只有根据实际影响其值的参数计算损失的偏导数才有意义。

在 Theano 中计算 Hessian 的最简单方法是使用theano.gradient.hessian便捷函数:

d2y = theano.gradient.hessian(loss, a)

有关使用和组合的替代手动方法,请参阅此处的文档。theano.gradtheano.scan

在您的示例中,Hessian 将是一个 3x3 零矩阵,因为损失 wrt 的偏导数a独立于a(它只是一个向量)。

于 2016-02-02T23:03:31.167 回答