我最近在Sympy中遇到了一些性能瓶颈(特别是,通过使用lambdas替换来计算符号矩阵的一行代码占用了程序运行时的90%),所以我决定让Theano试一试。在
它以前的应用是计算高斯过程超参数上的偏导数,其中使用一个(1,k)维辛符号矩阵(MatrixSymbol)可以很好地迭代该列表并区分每个项目上的矩阵。在
然而,这并没有贯彻到Theano中,文档似乎也没有详细说明如何做到这一点。索引ano中的符号向量将返回子传感器类型,这对于计算上的渐变无效。在
下面是一个简单的(但完全不正确的算法-剥离到我试图获得的功能)的版本。在
编辑:我修改了代码示例,将数据作为张量传递到函数中,如下所示,并尝试使用一系列单独的标量张量,因为我无法索引符号Theano向量的值,但也没有效果。在
import theano
import numpy as np
# Sample data
data = np.array(10*np.random.rand(5, 3), dtype='int64')
# Not including data as tensor, incorrect/invalid indexing of symbolic vector
l_scales_sym = theano.tensor.dvector('l_scales')
x = theano.tensor.dmatrix('x')
f = x/l_scales_sym
f_eval = theano.function([x, l_scales_sym], f)
df_dl = theano.gradient.jacobian(f.flatten(), l_scales_sym[0])
df_dl_eval = theano.function([x, l_scales_sym], df_dl)
代码片段的最后第二行是我试图对“length-scale”变量列表中的一个元素求偏导数,但是这种索引不适用于符号向量。在
任何帮助将不胜感激!在
使用ano时,所有变量都应定义为ano张量(或共享变量);否则,变量不会成为计算图的一部分。在
f = data/l_scales_sym
中,变量data
是一个numpy数组。试着把它定义为一个张量,它应该有用。在相关问题 更多 >
编程相关推荐