欢迎访问宙启技术站
智能推送

数据增强在Python中的ImageDataGenerator()实现

发布时间:2023-12-26 10:51:02

数据增强是机器学习和深度学习中非常重要的一步,可以通过对训练数据进行多样化的变换和扩充,来增加数据的多样性,并帮助模型更好地学习和泛化。在Python中,一个通用的库用于数据增强是Keras的ImageDataGenerator。

ImageDataGenerator是Keras中一个非常常用的类,用于实时数据扩充。它可以在训练模型时对数据进行实时增强,将原始数据进行多样化的处理,比如旋转、缩放、翻转、剪切、色彩变换等。下面我们用一个具体的例子来介绍如何使用ImageDataGenerator进行数据增强。

首先,我们需要导入必要的库:

from tensorflow.keras.preprocessing.image import ImageDataGenerator
import matplotlib.pyplot as plt
import numpy as np

假设我们有一个训练集的文件夹,里面有不同类别的图像。我们可以使用ImageDataGenerator.from_directory()函数来从文件夹中加载数据,并进行实时数据增强:

train_datagen = ImageDataGenerator(
    rotation_range=15,  # 随机旋转角度范围
    width_shift_range=0.1,  # 随机水平平移范围
    height_shift_range=0.1,  # 随机垂直平移范围
    shear_range=0.1,  # 随机错切变换范围
    zoom_range=0.1,  # 随机缩放范围
    horizontal_flip=True,  # 随机水平翻转
    fill_mode='nearest'  # 填充像素的策略
)

train_generator = train_datagen.flow_from_directory(
    'train',  # 训练集文件夹路径
    target_size=(150, 150),  # 图像大小
    batch_size=32,  # 批量大小
    class_mode='binary'  # 类别模式
)

在上述代码中,ImageDataGenerator的参数设置了一些常用的数据增强操作,比如随机旋转、平移、错切变换、缩放和水平翻转等,并通过fill_mode指定了填充像素的策略。然后我们调用ImageDataGenerator.flow_from_directory()函数从文件夹中加载数据,并指定了图像的大小、批量大小和类别模式。

接下来,我们可以查看一些经过数据增强后的图像样本:

# 可视化部分图像样本
fig, axs = plt.subplots(3, 3)
fig.suptitle('Data Augmentation')
fig.tight_layout(pad=0.5)

for i in range(3):
    for j in range(3):
        batch = train_generator.next()
        image = batch[0][0]
        axs[i, j].imshow(image.astype(np.uint8))
        axs[i, j].axis('off')
        
plt.show()

在上述代码中,我们使用train_generator.next()函数来获取下一个批次的图像数据。然后我们将获取到的图像样本可视化出来。可以看到,每一张图像都会应用一些随机的变换来增加数据的多样性。

最后,我们可以使用生成的增强数据来训练模型:

model.fit(
    train_generator,
    steps_per_epoch=200,  # 每个epoch中的步骤数
    epochs=10  # 迭代次数
)

在上述代码中,我们将train_generator作为训练数据传递给了model.fit()函数,并通过steps_per_epoch指定了每个epoch中的步骤数。

以上就是使用ImageDataGenerator进行数据增强的一个简单示例。通过ImageDataGenerator,我们可以对训练数据进行多样化的处理和扩充,从而提高模型的泛化能力和准确率。在实际应用中,我们可以根据具体的需求来选择合适的数据增强操作,并根据实验结果来进一步调整参数。