我正在尝试使用
例如,
输出-f(x):5乘1向量,
关于输入-X:5 x 1 向量
我可以这样做,
import theano
import theano.tensor as T
X = T.vector('X')
f = X*3
[rfrx, []] = theano.scan(lambda j, f,X : T.grad(f[j], X), sequences=T.arange(X.shape[0]), non_sequences=[f,X])
fcn_rfrx = theano.function([X], rfrx)
fcn_rfrx(np.ones(5,).astype(float32))
结果是
array([[ 3., 0., 0., 0., 0.],
[ 0., 3., 0., 0., 0.],
[ 0., 0., 3., 0., 0.],
[ 0., 0., 0., 3., 0.],
[ 0., 0., 0., 0., 3.]], dtype=float32)
但由于它效率不高,因此我想得到 5 x 1 向量
通过做类似..
[rfrx, []] = theano.scan(lambda j, f,X : T.grad(f[j], X[j]), sequences=T.arange(X.shape[0]), non_sequences=[f,X])
这是行不通的。
有没有办法做到这一点?(对不起格式不好..我是新来的,正在学习)
(我添加了更清晰的示例):
给定输入向量:x[1], x[2], ..., x[n]
和输出向量:y[1], y[2], .., y[n],
其中 y[i] = f(x[i])。
我想要的结果
仅 df(x[i])/dx[i]
而不是
df(x[i])/dx[j] for (i<>j)
,为了计算效率(n 是数据数 > 10000)