Theano:用张量B的每个通道卷积张量A的每个通道

时间:2017-04-18 16:09:52

标签: python deep-learning theano conv-neural-network convolution

我有两种形式的4D张量:(1, num_channels, r, c)

我假设这里有1个迷你批次,而num_channels_a!= num_channels_b

我想将张量A的每个通道与张量B的每个通道卷积并收集结果: result =(num_channels_a,num_channel_b,result_r,result_c)

在普通的老蟒蛇中,这是直截了当的:

result = np.zeros((tensorA.shape[1], tensorB.shape[1], result_shape_r, result_shape_c))
for channelA in xrange(0, tensorA.shape[1]):
    for channelB in xrange(0, tensorB.shape[1]):
        result[channelA, channelB] = scipy.signal.convolve2d(tensorA[0][channelA], tensorB[0][channelB], mode='valid')

这显然是非常缓慢和低效的。它确实应该是并行化的主要候选者,因为每个通道组合的卷积独立于任何其他通道组合。

我尝试使用theano.tensor.nnet.conv2d实现基于Theano的功能。此theano函数假定其输入格式为:(batch size, input channels, input rows, input columns)(output channels, input channels, filter rows, filter columns)

卷积

显然,形状对应于“输入通道”,并且是神经网络中常见的卷积方法,将输入数据与一组与输入数据匹配相同通道深度的滤波器进行卷积。这并不是我想要实现的目标。

我尝试使用th.scan循环遍历B的通道,然后复制此通道[r,c] vals a_num_channels次以使用张量A进行卷积,但这不正确。

例如,我的张量可以是A(1,40,19,19)和B(1,100,10,10)。在这种情况下,我想得到(40,100,10,10)

的结果

关于我如何能够完成我在Theano函数中描述的内容的任何想法?

0 个答案:

没有答案
相关问题