我想在Theano中定义以下两个变量的函数并计算其雅可比行列式:
f(x1,x2) = sum((2 + 2k - exp(k*x1) - exp(k*x2))^2, k = 1..10)
如何为上述表达式创建Theano函数 - 并最终使用雅可比行列式最小化它?
答案 0 :(得分:3)
由于你的函数是标量,雅可比矩阵会减少到渐变。假设你的两个变量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])
你可以在标准方式updates
中使用theano.function
(参见theano教程)来制作渐变下降,将x1, x2
设置为givens中的共享变量,手动编写python级别,或使用其他人指定的scan
。