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