在Theano中,三维和四维张量的尺寸都不是可播放的.你必须明确地设置它们.那么Numpy原则就可以了.一种方法是使用
T.patternbroadcast.要阅读有关广播的更多信息,请参阅
this.
在其中一个张量中有三个维度.首先,您需要在末尾附加单个维度,然后使该维度成为可广播的.这两件事可以通过一个命令来实现 – T.shape_padaxis.整个代码如下:
import theano
from theano import tensor as T
import numpy as np
X = T.ftensor4('X')
Y = T.ftensor3('Y')
Y_broadcast = T.shape_padaxis(Y, axis=-1) # appending extra dimension and making it
# broadcastable
Z = T.sum((X*Y_broadcast), axis=1) # element-wise multiplication
f = theano.function([X, Y], Z, allow_input_downcast=True)
# Making sure that it works and gives correct results
x = np.random.normal(size=(3, 2, 2, 4))
y = np.random.normal(size=(3, 2, 2))
theano_result = f(x,y)
numpy_result = np.sum(y[:,:,:,np.newaxis] * x, axis=1)
print np.amax(theano_result - numpy_result) # prints 2.7e-7 on my system, close enough!
我希望这有帮助.