Neural network 将张量的各个通道传递给Keras中的层

Neural network 将张量的各个通道传递给Keras中的层,neural-network,theano,conv-neural-network,keras,Neural Network,Theano,Conv Neural Network,Keras,我试图为theano后端模拟相当于SeparableConvolution2D层的东西(TensorFlow后端已经存在)。作为第一步,我需要做的是将一个通道从张量传递到下一层。假设我有一个名为conv1的二维卷积层,它有16个过滤器,产生一个带有形状的输出:(batch_size,16,height,width)。我需要选择带有形状(:,0,:,:,:)的子传感器,并将其传递到下一层。够简单吧 这是我的代码: from keras import backend as K image_inpu

我试图为theano后端模拟相当于SeparableConvolution2D层的东西(TensorFlow后端已经存在)。作为第一步,我需要做的是将一个通道从张量传递到下一层。假设我有一个名为conv1的二维卷积层,它有16个过滤器,产生一个带有形状的输出:(batch_size,16,height,width)。我需要选择带有形状(:,0,:,:,:)的子传感器,并将其传递到下一层。够简单吧

这是我的代码:

from keras import backend as K

image_input = Input(batch_shape = (batch_size, 1, height, width ), name = 'image_input' )

conv1 = Convolution2D(16, 3, 3, name='conv1', activation = 'relu')(image_input)

conv2_input = K.reshape(conv1[:,0,:,:] , (batch_size, 1, height, width))

conv2 = Convolution2D(16, 3, 3, name='conv1', activation = 'relu')(conv2_input)
这引发了:

异常:您试图调用层“conv1”。该层没有关于其预期输入形状的信息,因此无法构建。您可以通过:layer.build(批处理输入形状)手动构建它。


为什么图层没有所需的形状信息?我正在使用theano后端的重塑。这是将单个通道传递到下一层的正确方法吗?

我在keras用户组上问了这个问题,我在那里得到了答案:

引用它:

您需要使用lambda层,例如:lambda(x:x[:,0:1,:,:],output_shape=lambda x:(x[0],1,x[2],x[3]))

请注意,这种可分离卷积的手动实现效率极低。正确的解决方案是使用TensorFlow后端


您应该引用该链接的相关部分,以便该答案是完整的。