ValueError: 检查时出错:预期 flatten_1_input 的形状为 (None, 4, 4, 512),但得到的数组形状为 (1, 150, 150, 3)

我按照这个链接的指南构建了一个模型,并在微调部分之前停止,以使用以下代码在其他图像上测试模型:

img_width, img_height = 150, 150batch_size = 1test_model = load_model('dog_cat_model.h5')validation_data_dir = "test1"test_datagen = ImageDataGenerator(rescale=1. / 255)validation_generator = test_datagen.flow_from_directory(    validation_data_dir,    target_size=(img_width, img_height),    batch_size=batch_size,    shuffle=False,    class_mode='binary')predictions = test_model.predict_generator(validation_generator, len(validation_generator.filenames));for i in range(len(validation_generator.filenames)):    print(validation_generator.filenames[i], ": ", predictions[i])

但是我得到了以下错误:

ValueError: Error when checking : expected flatten_1_input to have shape (None, 4, 4, 512) but got array with shape (1, 150, 150, 3)

打印 test_model.summary 给出了以下输出:

_________________________________________________________________Layer (type)                 Output Shape              Param #=================================================================flatten_1 (Flatten)          (None, 8192)              0_________________________________________________________________dense_1 (Dense)              (None, 256)               2097408_________________________________________________________________dropout_1 (Dropout)          (None, 256)               0_________________________________________________________________dense_2 (Dense)              (None, 1)                 257=================================================================Total params: 2,097,665Trainable params: 2,097,665Non-trainable params: 0_________________________________________________________________None

我完全不知道这意味着什么。

这是我用来创建模型的代码:

img_width, img_height = 150, 150top_model_weights_path = 'bottleneck_fc_model.h5'train_data_dir = 'data/train'validation_data_dir = 'data/validation'batch_size = 16train_samples = 2000validation_samples = 800epochs = 50def save_bottlebeck_features():    datagen = ImageDataGenerator(rescale=1. / 255)    # build the VGG16 network    model = applications.VGG16(include_top=False, weights='imagenet')    train_generator = datagen.flow_from_directory(        train_data_dir,        target_size=(img_width, img_height),        batch_size=batch_size,        class_mode=None,        shuffle=False)    validation_generator = datagen.flow_from_directory(        validation_data_dir,        target_size=(img_width, img_height),        batch_size=batch_size,        class_mode=None,        shuffle=False)    predict_size_train = int(math.ceil(train_samples / batch_size))    bottleneck_features_train = model.predict_generator(train_generator, predict_size_train)    np.save('bottleneck_features_train.npy', bottleneck_features_train)    predict_size_validation = int(math.ceil(validation_samples / batch_size))    bottleneck_features_validation = model.predict_generator(validation_generator, predict_size_validation)    np.save('bottleneck_features_validation.npy', bottleneck_features_validation)def train_top_model():    train_data = np.load('bottleneck_features_train.npy')    train_labels = np.array([0] * (train_samples // 2) + [1] * (train_samples // 2))    validation_data = np.load('bottleneck_features_validation.npy')    validation_labels = np.array([0] * (validation_samples // 2) + [1] * (validation_samples // 2))    model = Sequential()    model.add(Flatten(input_shape=train_data.shape[1:]))    model.add(Dense(256, activation='relu'))    model.add(Dropout(0.5))    model.add(Dense(1, activation='sigmoid'))    model.compile(optimizer='rmsprop',                  loss='binary_crossentropy',                  metrics=['accuracy'])    model.fit(train_data, train_labels,              epochs=epochs,              batch_size=batch_size,              validation_data=(validation_data, validation_labels))    model.save_weights(top_model_weights_path)    model.save('dog_cat_model.h5')save_bottlebeck_features()train_top_model()

希望有人能帮帮我 🙂


回答:

你在这行代码中混合了瓶颈模型和图像模型的逻辑:

test_model.predict_generator(...)

你向瓶颈模型输入了图像,导致了形状错误。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注