theano T.grad() error: not part of computational graph
theano T.grad() error: not part of computational graph
代码:
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
图的导数怎么不是图的一部分?这就是扫描用于计算粗麻布的原因吗?
这里:
d2y = T.grad(loss, dy)
您正在尝试计算关于 dy
的损失梯度。但是,损失仅取决于 a
和 b
的值,而不取决于 dy
,因此会出现错误。只有计算损失的偏导数与实际影响其值的参数有关才有意义。
在 Theano 中计算 Hessian 的最简单方法是使用 theano.gradient.hessian
便捷函数:
d2y = theano.gradient.hessian(loss, a)
有关使用 theano.grad
和 theano.scan
组合的替代手动方法,请参阅文档 here。
在您的示例中,Hessian 矩阵将是一个 3x3 的零矩阵,因为损失的偏导数 w.r.t。 a
独立于 a
(它只是一个向量)。
代码:
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
图的导数怎么不是图的一部分?这就是扫描用于计算粗麻布的原因吗?
这里:
d2y = T.grad(loss, dy)
您正在尝试计算关于 dy
的损失梯度。但是,损失仅取决于 a
和 b
的值,而不取决于 dy
,因此会出现错误。只有计算损失的偏导数与实际影响其值的参数有关才有意义。
在 Theano 中计算 Hessian 的最简单方法是使用 theano.gradient.hessian
便捷函数:
d2y = theano.gradient.hessian(loss, a)
有关使用 theano.grad
和 theano.scan
组合的替代手动方法,请参阅文档 here。
在您的示例中,Hessian 矩阵将是一个 3x3 的零矩阵,因为损失的偏导数 w.r.t。 a
独立于 a
(它只是一个向量)。