使用ImageDataGenerator进行分批训练

问题描述 投票:0回答:1

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

FileName              
s01_l01/1_1.png     

Labels_onehot
[[0.0, 0.0, 0.0,..., 1.0],..., [0.0, 0.0, 1.0,..., 0.0]]

FileName直接导致输入图像。我想对图像进行预处理(将它们的大小调整为(224,224),然后将它们缩放为(1./255)。Labels_onehot是一个热编码的标签。这些不必进一步预处理。

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

X_train.shape
(n, 224, 224, 3)

标签是y_train数据。

y_train.shape
(n, 8, 36)

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

但是最后,我能够相对容易地拟合模型,例如使用此代码:

model.fit(X_train, y_train, epochs=50, batch_size=32)

[现在,我想知道如何用ImageDataGenerator实现相同的效果。有没有一种方法可以手动执行我之前执行的所有步骤?

python conv-neural-network generator
1个回答
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_rangeheight_shift_range用于水平和垂直垂直移位。
  • zoom_range:缩放量。如果为标量z,则缩放比例为在[1-z,1 + z]范围内随机选择。
  • horizo​​ntal_flip:是否随机水平翻转图像。
  • vertical_flip:是否垂直随机翻转图像。
  • rescale:缩放系数。这会将图像乘以缩放比例因子。通过指定1.0 / 255的重缩放因子,这可能是一种标准化数据的有用方法。

流程函数返回一个生成器,该生成器是用于构造增强图像的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

© www.soinside.com 2019 - 2024. All rights reserved.