合并多个keras max pooling层

时间:2017-10-03 18:25:08

标签: python machine-learning keras max-pooling

我是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>。

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

1 个答案:

答案 0 :(得分:0)

对于连接,除了concat维度本身之外,所有维度必须具有相同数量的元素。

如您所见,您的结果已经形成:

data.forEach(function(data, index){ data[index] = data.split("\n"); })

当然,连接它们的唯一可能方法是在第二轴(轴= 1)

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

但要注意(除非你有具体的理由并且知道你正在做什么)这会产生一个非常奇怪的图像,因为你在空间维度而不是在频道中连接尺寸。