使用ImageDataGenerator进行批量训练

时间:2020-06-03 21:23:08

标签: python conv-neural-network generator

我有一个训练数据集,准备如下:

Irrlicht.lib

FileName s01_l01/1_1.png Labels_onehot [[0.0, 0.0, 0.0,..., 1.0],..., [0.0, 0.0, 1.0,..., 0.0]] 直接导致输入图像。我想对图像进行预处理(将它们调整为(224,224)并重新缩放为(1./255)。FileName是一个热编码的标签。这些不必进一步预处理。

最后,经过预处理的图像是我的Labels_onehot数据。

X_train

标签是X_train.shape (n, 224, 224, 3) 数据。

y_train

到目前为止,我正在手动预处理图像,然后加载预处理的图像(一个数据集)和标签(其他数据集)。这不是一种非常有效的方法,它会完全填满我的RAM。

但是最终,我能够相对容易地拟合我的模型,例如使用以下代码:

y_train.shape
(n, 8, 36)

现在,我想知道如何使用model.fit(X_train, y_train, epochs=50, batch_size=32) 实现相同的目标。有没有一种方法可以手动执行我之前执行的所有步骤?

1 个答案:

答案 0 :(得分:1)

ImageDataGenerator有很多方法

  1. 流:获取要素数据和标签数组,并返回一个迭代器,该迭代器生成生成的扩充数据批。
  2. flow_from_directory:获取目录的路径并生成一批扩充数据。

首先,我们将创建ImageDataGenerator的实例。

aug = tf.keras.preprocessing.image.ImageDataGenerator( rotation_range=20,
width_shift_range=0.1, shear_range=0.2, zoom_range=0.4, horizontal_flip=True)
  • rotation_range :度(0到180)。
  • width_shift_range height_shift_range 用于水平和垂直 垂直移动。
  • zoom_range :缩放量。如果为标量z,则缩放比例为 在[1-z,1 + z]范围内随机选择。
  • horizo​​ntal_flip :是否随机水平翻转图像。
  • vertical_flip :是否垂直随机翻转图像。
  • 重新缩放:重新缩放比例。这会将图像乘以缩放系数。通过指定1.0 / 255的重缩放因子,这可能是标准化数据的有用方法。

flow函数返回一个生成器,它是一个Python迭代器对象,用于构造我们的增强图像

flow_train_generator = aug.flow(x_train, y_train, batch_size=32)

flow_from_directory方法返回一个迭代器,该迭代器生成(x,y)元组,其中x是包含一批图像的NumPy数组,而y是对应标签的NumPy数组。

flow_dict_train_generator = aug.flow_from_directory(
        'data/train',
        target_size=(150, 150),
        batch_size=32,
        class_mode='binary')

请注意,每次在生成新批处理之前直接从磁盘读取数据时,来自目录的流会减慢模型训练过程,然后再对数据进行修改,然后再将该批处理传递给网络。

有关更多详细信息,请参见以下链接: https://www.tensorflow.org/api_docs/python/tf/keras/preprocessing/image/ImageDataGenerator