如何解读keras" predict_generator"输出?

时间:2017-05-24 11:24:31

标签: python machine-learning neural-network deep-learning keras

我正在实施图像分类项目。我已经生成了模型并保存了它。它训练有素。当我在keras中使用predict_generator对测试图像进​​行分类时,对于每个图像,我在预测numpy数组中为每个图像获取多行。

预测代码:

from keras.models import load_model
from keras.preprocessing.image import ImageDataGenerator
from keras.preprocessing.image import img_to_array, load_img
import numpy as np

# dimensions of our images.
img_width, img_height = 150, 150
batch_size = 16

test_model = load_model('first_try1.h5')


img = load_img('data/train/dogs/dog.2.jpg',False,target_size=(img_width,img_height))

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,
    class_mode='binary')
print(len(validation_generator.filenames))
predictions=test_model.predict_generator(validation_generator,len(validation_generator.filenames));
#print(predictions)

输出:

Found 5 images belonging to 1 classes.
5
[[ 0.0626688 ]
 [ 0.07796276]
 [ 0.46529126]
 [ 0.28495458]
 [ 0.07343803]
 [ 0.07343803]
 [ 0.0626688 ]
 [ 0.46529126]
 [ 0.28495458]
 [ 0.07796276]
 [ 0.0626688 ]
 [ 0.28495458]
 [ 0.07796276]
 [ 0.46529126]
 [ 0.07343803]
 [ 0.07796276]
 [ 0.46529126]
 [ 0.0626688 ]
 [ 0.07343803]
 [ 0.28495458]
 [ 0.0626688 ]
 [ 0.07796276]
 [ 0.46529126]
 [ 0.07343803]
 [ 0.28495458]]

1 个答案:

答案 0 :(得分:11)

因此,根据文档,您要多次调用生成器len(validation_generator.filenames) - 每次调用时都会提供大小为batch_size的样本。由于实现ImageGenerator的方式 - 如果没有足够的文件来完成批处理(在您的情况下,您有batch_size=16但文件夹中只有5个图像) - 返回最大可能数量的图像 - 你的情况 - 5.所以你得到len(validation_generator.filenames) * 5 = 25图像进行评估 - 这就是为什么你有这样的结果(如果仔细观察 - 你在每5个数字中都有相同的值)。为了按filenames的顺序获取此示例,您需要创建一个新shuffle选项设置为False并使用batch_size=5的新生成器,并将其调用一次(或者与batch_size=1并称之为5次。