我从论文中知道:Efficientnet B0 的输出是 (*,7,7,1280(,对吧?如果是这样,globalAveragePooling2D 将得到 ndim = 4,而不是 2。
model=Sequential()
inputS=(height,width,depth)
chanDim=-1
model.add(EfficientNetB0(inputS, include_top=True, weights='imagenet'))
model.add(GlobalAveragePooling2D())
model.add(Dense(1024))
model.add(Activation("swish"))
model.add(BatchNormalization(axis=chanDim))
model.add(Dropout(0.25))
model.add(Dense(256))
model.add(Activation("swish"))
model.add(BatchNormalization(axis=chanDim))
model.add(Dropout(0.25))
model.add(Dense(32))
model.add(Activation("tanh"))
model.add(BatchNormalization(axis=chanDim))
model.add(Dropout(0.25))
model.add(Dense(classes))
model.add(Activation("softmax"))
return model
ValueError: Input 0 is incompatible with layer global_average_pooling2d_2: expected ndim=4, found ndim=2
这是因为您将include_top
设置为True
,这意味着分类层包含在模型中,因此整个模型的输出形状(samples, classes)
,这可能不是您想要的。
由于您想要特征映射,因此您应该在EfficientNetB0
的实例化中将include_top
设置为False
。