Python 对Keras中的4D数据执行2D卷积

Python 对Keras中的4D数据执行2D卷积,python,keras,conv-neural-network,Python,Keras,Conv Neural Network,我有维度24*64*64*10(不包括批量大小)的数据 我想将输入拆分为24个维度的输入64*64*10,对每个维度执行Conv2D,然后将它们连接起来,再次获得4D数据以进行进一步处理 有关实施的任何帮助都会有所帮助。我和凯拉斯一起工作 编辑:我尝试使用以下代码来执行2D卷积 num_ch= 24 input= Input(shape=(64,64,10,num_ch)) print(input.shape) branch_out= [] for i in range(num_ch):

我有维度
24*64*64*10
(不包括批量大小)的数据

我想将输入拆分为24个维度的输入
64*64*10
,对每个维度执行
Conv2D
,然后将它们连接起来,再次获得4D数据以进行进一步处理

有关实施的任何帮助都会有所帮助。我和凯拉斯一起工作

编辑:我尝试使用以下代码来执行2D卷积

num_ch= 24
input= Input(shape=(64,64,10,num_ch))
print(input.shape)
branch_out= []
for i in range(num_ch):
    out= Lambda(lambda x: x[:,:,:,:,i] )(input)
    print(out.shape)
    out= Conv2D(10, kernel_size=(3,3),strides= (1,1), padding='same', data_format= 'channels_last')(input)
    branch_out.append(out)
我得到了以下错误:

(?, 64, 64, 10, 24)
(?, 64, 64, 10)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-83-51977f4edbba> in <module>
      7     out= Lambda(lambda x: x[:,:,:,:,i] )(input)
      8     print(out.shape)
----> 9     out= Conv2D(10, kernel_size=(3,3),strides= (1,1), padding='same', data_format= 'channels_last')(input)
     10     branch_out.append(out)

~/anaconda3/lib/python3.7/site-packages/keras/engine/base_layer.py in __call__(self, inputs, **kwargs)
    412                 # Raise exceptions in case the input is not compatible
    413                 # with the input_spec specified in the layer constructor.
--> 414                 self.assert_input_compatibility(inputs)
    415 
    416                 # Collect input shapes to build layer.

~/anaconda3/lib/python3.7/site-packages/keras/engine/base_layer.py in assert_input_compatibility(self, inputs)
    309                                      self.name + ': expected ndim=' +
    310                                      str(spec.ndim) + ', found ndim=' +
--> 311                                      str(K.ndim(x)))
    312             if spec.max_ndim is not None:
    313                 ndim = K.ndim(x)

ValueError: Input 0 is incompatible with layer conv2d_25: expected ndim=4, found ndim=5
(?,64,64,10,24)
(?, 64, 64, 10)
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在里面
7 out=Lambda(Lambda x:x[:,:,:,:,:,i])(输入)
8打印(输出形状)
---->9 out=Conv2D(10,内核大小=(3,3),步幅=(1,1),padding='same',数据格式='channels'u last'(输入)
10分支_out.追加(out)
~/anaconda3/lib/python3.7/site-packages/keras/engine/base\u layer.py in\uuuu\u调用(self,input,**kwargs)
412#在输入不兼容的情况下引发异常
413#具有图层构造函数中指定的输入规格。
-->414.断言输入兼容性(输入)
415
416#收集输入形状以构建图层。
~/anaconda3/lib/python3.7/site-packages/keras/engine/base\u layer.py在assert\u input\u兼容性(self,inputs)中
309 self.name+':应为ndim=+
310 str(spec.ndim)+',发现ndim='+
-->311 str(K.ndim(x)))
312如果spec.max\u ndim不是无:
313 ndim=K.ndim(x)
ValueError:输入0与层conv2d_25不兼容:预期ndim=4,发现ndim=5

我不明白为什么它仍然显示维度为5。

您之前的问题,也是完全相同的问题,因为太宽而关闭,您不应该再发布完全相同的问题,您应该尝试改进,以便人们能够回答它,这将产生不同的问题。更改
out=Conv2D(10,内核大小=(3,3),步长=(1,1),padding='same',data'u format='channels'u last')(输入)
to
out=Conv2D(10,内核大小=(3,3),步长=(1,1),padding='same',data'u format='channels'u last')(输出)
。Conv2D的输入应该是
out
not
input
您之前的问题,而且完全相同的问题因为太宽而关闭,您不应该再次发布完全相同的问题,您应该尝试改进,以便人们能够回答,这将产生不同的问题。更改
out=Conv2D(10,内核大小=(3,3),步幅=(1,1),padding='same',data'u format='channels'u last')(输入)
out=Conv2D(10,内核大小=(3,3),跨步=(1,1),padding='same',data'u format='channels'u last')(输出)
。Conv2D的输入应该是
out
而不是
input