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

使用Python中的ImageDataGenerator()进行图像分类任务的数据生成

发布时间:2023-12-26 10:55:24

ImageDataGenerator是Keras中的一个图像数据生成器,可以用于在训练模型时生成扩充后的图像数据。它可以对图像进行随机扩充、缩放、旋转、翻转等操作,从而增加训练样本的多样性,提升模型的泛化能力。

下面是一个使用ImageDataGenerator生成图像数据的例子:

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

# 创建一个ImageDataGenerator对象
datagen = ImageDataGenerator(
    rescale=1./255,   # 对图像进行缩放,将像素值映射到0-1之间
    rotation_range=40,   # 随机旋转图像的角度范围
    width_shift_range=0.2,   # 随机水平移动图像的比例范围
    height_shift_range=0.2,  # 随机垂直移动图像的比例范围
    shear_range=0.2,   # 随机错切变换的角度范围
    zoom_range=0.2,   # 随机缩放图像的范围
    horizontal_flip=True,   # 随机水平翻转图像
    fill_mode='nearest'   # 填充新创建像素的方法
)

# 从文件夹中加载图像数据并进行扩充
train_generator = datagen.flow_from_directory(
    'train',   # 图像文件夹的路径
    target_size=(150, 150),  # 将所有图像的大小调整为150x150
    batch_size=32,   # 每批生成的图像数量
    class_mode='binary'   # 类别模式:'binary'表示二元分类,'categorical'表示多类别分类,'sparse'表示表示稀疏标签,'input'表示输入图像中的像素值
)

# 显示生成的图像数据
imgs, labels = next(train_generator)   # 获取一批图像数据和对应的标签
plt.figure(figsize=(10, 10))
for i in range(32):
    plt.subplot(8, 4, i+1)
    plt.imshow(imgs[i])
    plt.title(labels[i])
    plt.axis('off')
plt.show()

在这个例子中,首先创建了一个ImageDataGenerator对象,并设置了一系列数据增强的参数。然后使用flow_from_directory方法从文件夹中加载图像数据,并通过传入参数指定了图像大小、批量大小、类别模式等。最后使用next方法获取了一批图像数据和对应的标签,并通过Matplotlib库将生成的图像可视化输出。

通过使用ImageDataGenerator来生成扩充后的图像数据,可以扩充训练样本的数量,增加数据的多样性,提高模型的泛化能力,从而改善图像分类任务的效果。