在我训练了一个模型之后。然后我在评估的步骤上感到困惑。它显示出不同的结果。首先,我的训练数据集和测试数据集来自:
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=”,它会显示多种结果。这个“步骤”是什么意思?我该如何选择合适的?
在 documentation ,它说:
steps: Total number of steps (batches of samples) to yield from generator before stopping. Optional for Sequence: if unspecified, will use the len(generator) as a number of steps.
您的测试生成器与每个生成器一样,每次您下次调用时都会生成一批新数据。在您的例子中,由于 batch_size
为 64,因此一个步骤对应 64 个测试示例。但您的测试数据集可能不止于此。 Keras
提供了此功能,以便您可以选择对测试数据的子集进行测试,或者如果您的测试数据非常大并且可能无法装入内存(因此您可以一点一点地预测)。
当您选择不同的步长值时,您看到的结果略有不同的原因是您没有使用相同的测试数据评估您的模型
- 首先,您会在测试生成器中获得 24 个批处理 --> 24*64 测试示例。
- 第二个,您将获得 64*64 的测试示例。
- 在最后一个中,您将获取所有内容(或者几乎在测试样本数量不是batch_size的倍数的情况下)。
我是一名优秀的程序员,十分优秀!