加载预训练的Keras模型并进行预测

我使用Keras的一些示例拼凑了一个简单的神经网络,基于Kaggle的猫狗基础数据集(https://www.kaggle.com/c/dogs-vs-cats-redux-kernels-edition/data)。我成功地训练并保存了一个模型,使用的是

model.fit_generator(         #train_generator,         #samples_per_epoch=2000,         #nb_epoch=50,         #validation_data=validation_generator,         #nb_val_samples=800)model.save('first_model.h5')

但是当我尝试加载模型进行预测时,出现了以下错误

Traceback (most recent call last):  File "/Users/me/PycharmProjects/CatVsDog/SampleML.py", line 48, in <module>    print(saved_model.predict_generator(test_generator, 12500))  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/keras/models.py", line 1012, in predict_generator    pickle_safe=pickle_safe)  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/keras/engine/training.py", line 1763, in predict_generator    outs = self.predict_on_batch(x)  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/keras/engine/training.py", line 1371, in predict_on_batch    self.internal_input_shapes)  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/keras/engine/training.py", line 85, in standardize_input_data    'Found: ' + str(data)[:200] + '...')TypeError: Error when checking : data should be a Numpy array, or list/dict of Numpy arrays. Found: None...Exception ignored in: <bound method Session.__del__ of <tensorflow.python.client.session.Session object at 0x10c7586d8>>Traceback (most recent call last):  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/tensorflow/python/client/session.py", line 581, in __del__UnboundLocalError: local variable 'status' referenced before assignment

这是我在PyCharm解决方案中保存图像的位置。测试目录中有1到12500个.jpg文件,训练集的猫和狗目录中各有11500个带标签的.jpg文件,验证目录中各有1000个带标签的.jpg文件。enter image description here

这是我的代码

from __future__ import print_functionfrom keras.models import Sequentialfrom keras.layers import Dense, Dropout, Activation, Flattenfrom keras.layers import Convolution2D, MaxPooling2Dfrom keras.preprocessing.image import ImageDataGeneratorfrom keras.models import load_modeltrain_datagen = ImageDataGenerator(        rescale=1./255,        shear_range=0.2,        zoom_range=0.2,        horizontal_flip=True)test_datagen = ImageDataGenerator(rescale=1./255)train_generator = train_datagen.flow_from_directory(        'train',        target_size=(64, 64),        batch_size=32,        class_mode='binary')validation_generator = test_datagen.flow_from_directory(        'validate',        target_size=(64, 64),        batch_size=32,        class_mode='binary')test_generator = train_datagen.flow_from_directory(         'test',         target_size=(64, 64),         batch_size=32,         class_mode='binary')nb_filters = 32kernel_size = (3,3)pool_size = (2, 2)nb_classes = 2input_shape = (64, 64, 3)saved_model = load_model('first_model.h5')score = saved_model.evaluate_generator(validation_generator, 2000)print('Test score:', score[0])print('Test accuracy:', score[1])print(saved_model.predict_generator(test_generator, 12500))

回答:

我认为你提供给predict_generator的数据格式不正确。

在进行预测时,与训练和评估不同,你不需要提供标签。因此,我建议你将test_generator更改为如下:

test_generator = train_datagen.flow_from_directory(     'test',     target_size=(64, 64),     batch_size=32,     #这将不会输出目标。      class_mode=None)

你可以在这里找到关于ImageDataGenerator文档

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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