Keras-steps_per_epoch计算与ImageDataGenerator输出不匹配

时间:2018-09-03 19:53:43

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

我正在与Keras一起执行基本的分类任务,并且似乎偶然发现了需要帮助的问题。

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

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

但是,在这里事情对我不利。这是我的代码段:

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生成,并确定从中生成的图像数量。

将这段代码运行了一个纪元后,我在目录中得到了600张图像,这个数字我无法获得,或者我弄错了。

在帮助我理解此代码中的计算方面的任何帮助将不胜感激。有没有人遇到过类似的问题?

TIA

1 个答案:

答案 0 :(得分:0)

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

不确定为什么您会看到更多的样本。您可以计算x.shape [0]并仔细检查您的代码是否符合您的解释?