我正在实施图像分类项目。我已经生成了模型并保存了它。它训练有素。当我在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]]
答案 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次。