ValueError:输入0与图层conv2d_2不兼容:预期ndim = 4,在Keras

时间:2018-05-28 03:56:31

标签: tensorflow machine-learning keras deep-learning conv-neural-network

我正在尝试使用一个函数使用keras将图层添加到非常深的CNN。这是我的功能:

def add_layer(input_shape, kernel_size, filters, count):
    x = Conv2D(filters, (kernel_size, kernel_size), padding = 'same', activation= None)(Input(input_shape))
    x = BatchNormalization()(x) 
    x = Activation('relu')(x)
    x = Conv2D(filters, (kernel_size, kernel_size), padding = 'same', activation= None)(x)
    x = BatchNormalization()(x) 
    x = Activation('relu')(x)
    return keras.layers.add([x,Input(input_shape)])

当我从以下地方调用此函数时:

x = Input(shape = (6,264,264))
y = Conv2D(64, (7, 7), padding='same', activation='relu')(x)
y = MaxPooling2D((2,2))(y)
y = add_layer(y.shape, 3, 64, 3)

它出现以下错误:

ValueError: Input 0 is incompatible with layer conv2d_2: expected ndim=4, found ndim=5

当我删除add_layer函数并简单地将maxpooling终止到密集层时,我得到:

AttributeError: 'Tensor' object has no attribute 'ndim'

可能是什么问题? (另外我的输入有50个np数组大小(6,264,264)),即(50,6,264,264)

1 个答案:

答案 0 :(得分:0)

非常确定你的行,

x = Conv2D(filters, (kernel_size, kernel_size), padding = 'same', activation= None)(Input(input_shape))

应该是

x = Conv2D(filters, (kernel_size, kernel_size), padding = 'same', activation= None)(Input(batch_shape=input_shape))

默认情况下,ny_layer.shape会在形状中添加批量大小。但是,对于Input(input_shape),第一个参数假定形状没有批量大小,并为其输出添加另一个维度。这可以解释额外维度的起源。