我正在使用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)