在theano中定义表达

时间:2014-10-20 11:15:42

标签: python theano

我对theano库有疑问。 假设我有两个矩阵:a_ijb_ij分别具有[n, m1][n, m2]形状。

我想定义一个赋予c形状[n, m1, m2]张量的表达式:

c_ijk = a_ij * b_ik

(注意没有总和,所以这不是点积)。 当然我可以在循环中进行这个计算,但我希望theano为我计算导数。

提前致谢!

1 个答案:

答案 0 :(得分:1)

Theano张贴广播就像numpy数组一样。你所要做的就是

import theano
import theano.tensor as T

import numpy as np
rng = np.random.RandomState(42)

n, m1, m2  = 10, 20, 30
A = T.fmatrix()
B = T.fmatrix()

C = A.reshape((n, m1, 1)) * B.reshape((n, 1, m2))

func_C = theano.function([A, B], C)

a = rng.randn(n, m1).astype(np.float32)
b = rng.randn(n, m2).astype(np.float32)

r1 = func_C(a, b)
r2 = np.einsum("ij, ik -> ijk", a, b)
assert np.sqrt(((r1 - r2) ** 2).sum()) < 1e-5

C的定义是关键部分。这也可以通过动态形状来完成,但这个答案仍然在你的框架内。