Tensorflow 在Keras中定义每个历元的步骤

Tensorflow 在Keras中定义每个历元的步骤,tensorflow,keras,conv-neural-network,Tensorflow,Keras,Conv Neural Network,我正在阅读《Python深度学习》这本书,想了解更多关于定义每个历元的步骤和批量大小时会发生什么的信息。他们使用的例子包括4000张猫狗图片,其中2000张用于训练,1000张用于验证,1000张用于测试。他们提供了两个模型示例。一个有图像增强,一个没有。我不明白他们为什么在这两种情况下改变批量大小 我已经理解了这个过程,1个历元是整个训练数据集的1次传递。批量大小决定了每一步显示多少图像。当我们改变批量大小时,我们改变了要从中学习的图像的数量。对于他们的第一个例子,有2000个图像在训练中,每

我正在阅读《Python深度学习》这本书,想了解更多关于定义
每个历元的步骤和
批量大小时会发生什么的信息。他们使用的例子包括4000张猫狗图片,其中2000张用于训练,1000张用于验证,1000张用于测试。他们提供了两个模型示例。一个有图像增强,一个没有。我不明白他们为什么在这两种情况下改变批量大小

我已经理解了这个过程,1个历元是整个训练数据集的1次传递。批量大小决定了每一步显示多少图像。当我们改变批量大小时,我们改变了要从中学习的图像的数量。对于他们的第一个例子,有2000个图像在训练中,每个历元有20100个步骤的批量大小是合乎逻辑的,他们使用的是什么。它需要100个步骤才能看到2000幅图像,完成一个新纪元。在下一个示例中,他们实现了比重新缩放图像更多的增强(共6次旋转更改、缩放、剪切等),批大小增加到32,但每个历元的步长保持在100。我假设随着批量大小的增加,每个历元的步数减少,在本例中为63(从62.5取整)。在这种情况下,为什么每个历元的步数保持不变?最后,考虑到舍入问题,模型是否没有看到一些训练数据或看到太多数据

from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale=1./255)
test_datagane = ImageDataGenerator(rescale=1./255)
train_generator=train_datagen.flow_from_directory(
    train_dir,
    target_size = (150,150)
    batch_size=20 # for model 2 batch_size=32
    class_mode='binary')
validation_generator = test_datagen.flow_from_directory(
    validation_dir,
    target_size = (150,150)
    batch_size=20 # for model 2 batch_size=32
    class_mode='binary')
history = model.fit_generator(
    train_generator,
    steps_per_epoch = 100,  # same for both models
    epochs=30,
    validation_data=validation_generator,
    validation_steps=50) # same for both models

对于2000个图像和
批处理大小=32
,它将有62.5个步骤,如您所述,因此不能有100个步骤和32个批处理大小。如果将步骤指定为100,则会发生以下情况:

WARNING:tensorflow:Your input ran out of data; interrupting training. 
Make sure that your dataset or generator can generate at least `steps_per_epoch * epochs` batches.
如果要打印生成器的长度,您将看到:

len(train_generator) = 63, batch_size = 32
len(train_generator) = 50, batch_size = 20

所以这本书是错误的,它将是63步每历元,批大小为32。确切地说,它是写错的,除非你不重复数据集。但您并没有在代码中提供
repeat()
方法,所以这本书有一个打字错误。