我不明白Evaluation_generator方法(keras)中“步骤”的含义是什么

时间:2019-07-17 02:45:13

标签: python keras

我训练了模型之后。然后我在评估步骤中感到困惑。它显示了多种结果。 首先,我的火车数据集和测试数据集来自:

from keras.preprocessing.image import ImageDataGenerator
# create a data generator
datagen = ImageDataGenerator(rescale=1./255, validation_split=0.2)
# load and iterate training dataset
train_it = datagen.flow_from_directory(directory=train_path, target_size=(100, 100), color_mode="rgb",  class_mode='categorical', batch_size=64, subset='training')
# load and iterate test datas
test_it = datagen.flow_from_directory(directory=test_path, target_size=(100, 100), color_mode="rgb", class_mode='categorical', batch_size=64)

评估:

# evaluate model
loss = model.evaluate_generator(test_it, steps=24)
print('Accuracy: %.2f%%' % (loss[1]*100))

准确性:92.90%

# evaluate model
loss = model.evaluate_generator(test_it, steps=64)
print('Accuracy: %.2f%%' % (loss[1]*100))
'''

准确性:93.43%

batch_size= 100
# evaluate model
loss = model.evaluate_generator(test_it, steps= test_it.samples // batch_size)
print('Accuracy: %.2f%%' % (loss[1]*100))

准确性:93.28%

如果我更改“ steps =”,则显示各种结果。这个“步骤”是什么意思?而我该如何选择合适的呢?

1 个答案:

答案 0 :(得分:0)

documentation中,它表示:

  

个步骤:从中得出的步骤总数(一批样品)   发电机停止之前。序列的可选:如果未指定,将   使用len(generator)作为许多步骤。

您的测试生成器与每个生成器一样,每次您下次调用时都会生成新的一批数据。在您的情况下,由于batch_size为64,因此一个步骤对应于64个测试示例。但是您的测试数据集可能还不止这些。 Keras提供了此功能,因此您可以选择对部分测试数据进行测试,或者选择是否测试数据很大并且可能不适合内存(因此您逐渐进行预测)。

选择不同的步长值时看到的结果略有不同的原因是因为您没有在相同的测试数据上评估模型

  • 首先,您的测试生成器中有24个批次-> 24 * 64个测试示例。
  • 第二步,您将获得64 * 64个测试示例。
  • 在最后一个样例上,您需要采取一切措施(或者几乎是在测试样品的数量不是batch_size的倍数的情况下)。