📅  最后修改于: 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数据。具体的参数说明如下:
我们可以通过以下方式来遍历生成器中的数据:
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')
这样可以保证在训练和验证时使用的生成器是相互独立的。