关于矩阵输入的theano中的Hessian

时间:2016-08-30 10:37:55

标签: python theano hessian-matrix

我试图获得theano渐变和粗麻布的矢量化版本,即我想在几个点计算渐变和粗糙度,如下所示在矩阵中给出:

我有一个功能:

f(x_1,x_2,..,x_n)=exp(x_1^2+x_2^2+...+x_n^2)

我想用一个命令计算多个点的渐变。我可以这样做:

x = T.matrix('x')
y = T.diag(T.exp(T.dot(x,x.T)))
J = theano.grad(cost = y.sum(), wrt = x)
f = theano.function(inputs = [x], outputs = J)
f([[1,2],[3,4]])

它返回一个矩阵,这些行是在点(1,2)和(3,4)处计算的梯度。我希望得到与粗麻布相同的结果(在这种情况下,它将是一个三维张量,与矩阵相反,但是相同的想法)。以下代码:

H = theano.gradient.hessian(cost = y.sum(), wrt = x)

返回错误:

AssertionError: tensor.hessian expects a (list of) 1 dimensional variable as `wrt`

我能够通过以下代码

获得适当的结果
J = theano.grad(cost = y.sum(), wrt = x)
H = theano.gradient.jacobian(expression = J.flatten(), wrt = x)
g = theano.function(inputs = [x], outputs = H)
g([[1,2],[3,4]])

但是它产生了很多不必要的零,看起来效率低下而且很丑陋。获得所需结果的方法。有没有人有类似的问题,或者你能提出什么建议吗?

0 个答案:

没有答案