我正在使用keras基于Resnet50建立模型,下面的代码如下所示



input_crop = Input(shape=(3, 224, 224))

# extract feature from image crop
resnet = ResNet50(include_top=False, weights='imagenet')
for layer in resnet.layers:  # set resnet as non-trainable
    layer.trainable = False

crop_encoded = resnet(input_crop)


但是,我遇到了一个错误


  'ValueError:输入通道数不匹配
  过滤器尺寸224!= 3'


我该如何解决?

最佳答案

由于Theano&TensorFlow backends用于Keras的图像格式不同,通常会产生此类错误。在您的情况下,图像显然是channels_first格式(Theano),而最有可能您使用的是TensorFlow后端,需要使用channels_last格式的图像。

Keras中的MNIST CNN example提供了一种使您的代码不受此类问题影响的好方法,即同时为Theano和TensorFlow后端工作-这是对您的数据的适应方法:



from keras import backend as K

img_rows, img_cols = 224, 224

if K.image_data_format() == 'channels_first':
    input_crop = input_crop.reshape(input_crop.shape[0], 3, img_rows, img_cols)
    input_shape = (3, img_rows, img_cols)
else:
    input_crop = input_crop.reshape(input_crop.shape[0], img_rows, img_cols, 3)
    input_shape = (img_rows, img_cols, 3)

input_crop = Input(shape=input_shape)

08-25 00:28