📜  CNN – 使用生成器对图像数据进行预处理(1)

📅  最后修改于: 2023-12-03 15:30:02.077000             🧑  作者: Mango

使用生成器对图像数据进行预处理

简介

在使用深度学习模型进行图像识别任务时,数据预处理是非常重要的一步。然而,如果数据集非常大,一次性将所有数据读入内存中进行预处理是不太可行的。这时就可以使用生成器来对图像数据进行预处理,从而将数据处理过程分批进行。

使用方法

我们可以使用keras的ImageDataGenerator来创建一个图像生成器。

from keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(
        rescale=1./255,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True)

train_generator = train_datagen.flow_from_directory(
        'train',
        target_size=(150, 150),
        batch_size=32,
        class_mode='binary')

上面的代码创建了一个训练集的生成器train_generator。其中,train_datagen是一个用于图像增强的生成器,它用于对输入图片进行归一化、旋转、缩放等操作。flow_from_directory方法用于从目录中获取图像数据,并按需生成预处理后的batch数据。具体的参数说明如下:

  • rescale: 将图片的像素值缩放到0~1之间。
  • shear_range: 剪切强度,用于进行剪切变换。
  • zoom_range: 缩放范围,用于进行随机缩放。
  • horizontal_flip: 是否进行水平翻转。
  • target_size: 图片尺寸。
  • batch_size: 每个batch包含的图片数量。
  • class_mode: 图片的类别模式,binary表示二分类,categorical表示多分类。

我们可以通过以下方式来遍历生成器中的数据:

for data_batch, labels_batch in train_generator:
    print('data batch shape:', data_batch.shape)
    print('labels batch shape:', labels_batch.shape)
    break
注意事项

在使用生成器进行预处理时,应当特别注意生成器的使用方式。由于生成器是按需生成的,因此每次使用时应当重新创建一个新的生成器,否则可能会出现相互之间影响的问题。例如,我们可以将训练集和验证集的生成器分别创建:

train_generator = train_datagen.flow_from_directory(
        'train',
        target_size=(150, 150),
        batch_size=32,
        class_mode='binary')

validation_generator = test_datagen.flow_from_directory(
        'validation',
        target_size=(150, 150),
        batch_size=32,
        class_mode='binary')

这样可以保证在训练和验证时使用的生成器是相互独立的。