【发布时间】:2016-07-27 09:46:54
【问题描述】:
我最近在 Sympy 中使用符号矩阵导数遇到了一些性能瓶颈(具体来说,通过使用 lambdas 替换评估符号矩阵的单行代码占用了程序运行时间的约 90%),所以我决定试一试 Theano。
它之前的应用是评估高斯过程的超参数的偏导数,其中使用 Sympy 符号 (MatrixSymbol) 的 (1, k) 维矩阵在迭代此列表并区分每个矩阵上的矩阵时效果很好项目。
但是,这并没有延续到 Theano 中,并且文档似乎没有详细说明如何执行此操作。在 Theano 中索引符号向量返回 Subtensor 类型,对计算梯度无效。
下面是我正在尝试做的一个简单(但在算法上完全不正确 - 精简到我想要获得的功能)版本。
编辑:我已经修改了代码示例,将数据作为张量包含在下面建议的函数中,并包括替代尝试使用单独的标量张量列表,因为我无法索引 a象征性的 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)
代码 sn-p 的倒数第二行是我试图对“长度比例”变量列表中的一个元素进行偏导的地方,但这种索引不适用于符号向量。
任何帮助将不胜感激!
【问题讨论】:
标签: python theano derivative