我想在Theano中定义以下两个变量的函数并计算它的雅各比矩阵:
f(x1,x2) = sum((2 + 2k - exp(k*x1) - exp(k*x2))^2, k = 1..10)
如何创建一个 Theano 函数来计算上述表达式,并最终使用它的 Jacobian 进行最小化处理?
由于您的函数是标量函数,所以雅可比矩阵简化为梯度。假设您的两个变量x1,x2
是标量(从公式看起来是这样的,也可以很容易地推广到其他对象),您可以写成:
import theano
import theano.tensor as T
x1 = T.fscalar('x1')
x2 = T.fscalar('x2')
k = T.arange(1, 10)
expr = ((2 + 2 * k - T.exp(x1 * k) - T.exp(x2 * k)) ** 2).sum()
func = theano.function([x1, x2], expr)
func
。In [1]: func(0.25,0.25)
Out[1]: array(126.5205307006836, dtype=float32)
grad_expr = T.grad(cost=expr, wrt=[x1, x2])
您可以在theano.function中按照标准方式(请参见Theano教程)使用updates
来进行梯度下降,将x1, x2
作为共享变量在givens中手动设置,或者按照其他人的指示使用scan
。
scan
。 - ali_m