【问题标题】:Keras - steps_per_epoch calculation not matching with the ImageDataGenerator outputKeras - steps_per_epoch 计算与 ImageDataGenerator 输出不匹配
【发布时间】:2019-02-08 20:30:30
【问题描述】:

我正在使用 Keras 进行一项基本的分类任务,我似乎偶然发现了一个需要帮助的问题。

我有 200 个用于训练的样本和 100 个用于验证的样本,我打算使用 ImageDataGenerator 来增加我的任务的训练样本数量。我想确定传递给 fit_generator() 的训练图像的总数。

我知道 steps_per_epoch 定义了我们从生成器获得的批次总数,理想情况下它应该是样本数除以批次大小。

但是,这对我来说并不重要。这是我的代码的 sn-p:

num_samples = 200
batch_size = 10
gen = ImageDataGenerator(horizontal_flip = True,
                     vertical_flip = True,
                     width_shift_range = 0.1,
                     height_shift_range = 0.1,
                     zoom_range = 0.1,
                     rotation_range = 10
                    )
x,y = shuffle(img_data,img_label, random_state=2)
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.333, random_state=2)
generator = gen.flow(x_train, y_train, save_to_dir='check_images/sample_run')
new_network.fit_generator(generator, steps_per_epoch=len(x_train)/batch_size, validation_data=(x_test, y_test), epochs=1, verbose=2)

我正在保存增强图像以查看图像如何从 ImageDataGenerator 生成,并确定从中生成的图像数量。

在运行此代码单个 epoch 后,我的目录中有 600 张图像,这是我无法达到的数字,或者我犯了一个错误。

如果能帮助我理解这段代码中的计算,我们将不胜感激。有没有人遇到过类似的问题?

TIA

【问题讨论】:

    标签: python-3.x keras deep-learning classification generator


    【解决方案1】:

    gen.flow() 在内部创建一个 NumpyArrayIterator,然后使用 Iterator 计算 steps_per_epoch。理想情况下,如果steps_per_epoch 为None,则计算按steps_per_epoch = (x.shape[0] + batch_size - 1) // batch_size 与您的计算大致相同。

    不知道为什么您会看到更多的样本。您能否计算 x.shape[0] 并仔细检查您的代码是否与您解释的一致?

    【讨论】:

    • 嘿Aditya,我做到了。我注意到我的 fit() 没有批量大小,默认值为 32。我对其进行了修改,但数字仍然没有完全加起来
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    相关资源
    最近更新 更多