我原本以为steps_per_epoch可以设定为样本总数除以批次大小,这样每个epoch就能看到所有样本,但显示的数字让我觉得它训练的样本远少于这个数量。(如果我正确理解了这个链接:https://stanford.edu/~shervine/blog/keras-how-to-generate-data-on-the-fly)这里是相关代码行(我明确写出了样本数量)
model.fit_generator( train_generator, steps_per_epoch= 2451 // BATCH_SIZE, epochs=10)
但训练过程的输出显示类似153/154的数字,而我的数据集超过3000个样本。因此,到底什么是steps_per_epoch?在当前状态下,我的模型在每个epoch中是否看到了所有样本?如果没有,我该如何纠正这个问题?
Epoch 1/10153/153 [==============================] - 34s 225ms/step - loss: -0.4054 - dice_coef: 0.4054 - binary_accuracy: 0.2559 - acc: 0.2559Epoch 2/10
回答:
你是对的,步骤数应该等于total_dataset/batch_size
,但不一定要这样做(你可以设置任何数量),这里有三种可能的情况:
No_of_step = total_dataset/batch_size
– 在一个epoch中,模型只会看到每张图像(数据)一次。No_of_step < total_dataset/batch_size
– 模型无法看到所有图像,会有一些图像被遗漏。No_of_step > total_dataset/batch_size
– 有些图像会在网络中被传递超过一次。
注意:如果shuffle = True
,很难猜到哪些图像被遗漏或重复了。