合并多个Keras Max池层



我是Keras的新手。

我的目标是总共拥有4个最大池层。所有这些都具有相同的输入(n,256)。第一层进行全局最大池并给出1个输出。N/2合并大小和N/2步的第二层可提供2个输出。第三个给出4个输出,第四输出给出8个输出。这是我的代码。

    test_x = np.random.rand(N, 256, 1)
    model = Sequential()
    input1 = Input(shape=test_x.shape, name='input1')
    input2 = Input(shape=test_x.shape, name='input2')
    input3 = Input(shape=test_x.shape, name='input3')
    input4 = Input(shape=test_x.shape, name='input4')
    max1 = MaxPooling2D(pool_size=(N, 256), strides=N)(input1)
    max2 = MaxPooling2D(pool_size=(N / 2, 256), strides=N / 2)(input2)
    max3 = MaxPooling2D(pool_size=(N / 4, 256), strides=N / 4)(input3)
    max4 = MaxPooling2D(pool_size=(N / 8, 256), strides=N / 8)(input4)
    mrg = Merge(mode='concat')([max1, max2, max3, max4])

创建4个最大池层后,我尝试将它们合并在一起,但是Keras给出了此错误。

valueerror:两种形状中的尺寸1必须相等,但是带有输入形状的'merge_1/concat'(op:'concatv2')的4和8具有:[?,1,1,1],[?,2,1,1],[?,4,1,1],[?,8,1,1],[]和使用计算的输入张量:输入[4] =< 3>。

我该如何解决这个问题?合并正确的方法以实现我的目标吗?

用于串联,除contat维度本身外,所有维度都必须具有相同数量的元素。

如您所见,您的结果具有形状:

(?, 1, 1, 1)    
(?, 2, 1, 1)    
(?, 4, 1, 1)    
(?, 8, 1, 1)    

自然,串联它们的唯一可能的方法是在第二轴(axis = 1)

mrg = Concatenate(axis=1)([max1,max2,max3,max4])

,请注意,(除非您有特定的原因,并且知道您正在做的事情),这将导致非常奇怪的图像,因为您在空间维度上串联而不是在频道维度中。

最新更新