如何在Keras中正确设置steps_per_epoch和validation_steps?

jam*_*mes 9 python machine-learning deep-learning keras tensorflow

我在Keras训练过几个模特.我的训练集中有39,592个样本,验证集中有9,899个样本.我使用的批量大小为2.

当我检查我的代码时,我发现我的生成器可能缺少一些批量数据.

这是我的生成器的代码:

train_datagen = ImageDataGenerator(
            rescale=1. / 255,
            shear_range=0.2,
            zoom_range=0.2,
            horizontal_flip=True)

val_datagen = ImageDataGenerator(rescale=1. / 255)

train_generator = train_datagen.flow_from_directory(
            train_dir,
            target_size=(224, 224)
            batch_size=batch_size,
            class_mode='categorical')

validation_generator = val_datagen.flow_from_directory(
            val_dir,
            target_size=(224, 224),
            batch_size=batch_size,
            class_mode='categorical')
Run Code Online (Sandbox Code Playgroud)

我四处寻找我的发电机的行为,并找到了答案: 如果steps_per_epoch不适合样品数量怎么办?

我用这种方式计算了我的steps_per_epoch和validation_steps:

steps_per_epoch = int(number_of_train_samples / batch_size)
val_steps = int(number_of_val_samples / batch_size)
Run Code Online (Sandbox Code Playgroud)

使用此链接中的代码和我自己的批量大小和样本数量,我得到了这些结果:"缺少最后一批"的train_generator和"奇怪的行为"为val_generator.

我担心我必须重新训练我的模型.我应该为steps_per_epoch和validation_steps选择什么值?有没有办法为这些变量使用精确值(除了将batch_size设置为1或删除一些样本)?我有其他几个样本数量不同的模型,我认为他们都缺少一些批次.任何帮助将非常感激.

两个相关问题:

1-关于我已经训练的模型,它们是否可靠且经过适当培训?

2-如果我使用以下值设置这些变量会发生什么:

steps_per_epoch = np.ceil(number_of_train_samples / batch_size)
val_steps = np.ceil(number_of_val_samples / batch_size)
Run Code Online (Sandbox Code Playgroud)

在训练和验证过程中,我的模型会不会在每个时代看到一些图像?或者这是我的问题的解决方案?!

小智 1

由于 Keras 数据生成器旨在无限循环,steps_per_epoch因此指示在单个周期内从生成器获取新批次的次数。因此,如果您简单地采取steps_per_epoch = int(number_of_train_samples / batch_size),您的最后一批将少于batch_size物品并被丢弃。但是,就您而言,每个训练周期丢失一张图像并不是什么大问题。验证步骤也是如此。总结一下:你的模型训练[几乎:)]正确,因为丢失元素的数量很少。

对应于实现ImageDataGenerator https://keras.io/preprocessing/image/#imagedatagenerator-class如果您的步骤数大于预期,在达到最大样本数后,您将从头开始收到新批次,因为您的数据是循环了。在您的情况下,如果steps_per_epoch = np.ceil(number_of_train_samples / batch_size)您每个时期都会收到一个额外的批次,其中将包含重复的图像。