我正在尝试使用一个函数使用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)
答案 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)
,第一个参数假定形状没有批量大小,并为其输出添加另一个维度。这可以解释额外维度的起源。