使用 theano 的矩阵三重积

Matrix triple product with theano

这与这里的问题几乎相同 ,但对于 theano。

所以我有三个矩阵 ABC,大小为 n*rm*rl*r,我想要计算由三重(三线性)积产生的形状 (n,m,l) 的 3D 张量:

X[i,j,k] = \sum_a A[i,a] B[j,a] C[k,a]

ABC是共享变量:

A = theano.shared(numpy.random.randn(n,r))
B = theano.shared(numpy.random.randn(m,r))
C = theano.shared(numpy.random.randn(l,r))

我想用一个theano表达式来写,有办法吗? 如果有很多,哪个最快?

np.einsum('nr,mr,lr->nml', A, B, C)

相当于

np.dot(A[:, None, :] * B[None, :, :], C.T)

可以在 Theano 中实现为

theano.dot(A[:, None, :] * B[None, :, :], C.T)