【Deep Learning with Python】C5 ImageDataGenerator & 数据增广

mac2024-08-22  67

ImageDataGenerator 和数据增广

ImageDataGenerator图片生成器,是keras中处理原始图片非常好用的API,简单来说就是,图片到数据的一个预处理和转换。我觉得这个东西的用法应该结合数据增广来讲。

Python的生成器机制

其实应该是一个迭代器,懒加载。

数据增广

数据增广是视觉领域用于小数据集情况下对抗过拟合的好用的方法。超乎我想象的好用。

这是2000张图片的识别结果。这也是我之前遇到过非常严重的过拟合的问题,无从下手。使用数据增广之后,从70左右的准确率升到80.

在此之前,我对数据增广的理解是有问题的。我原来想象中的数据增广就是通过图形变换,得到更多数据,事实上输入并不需要变多,而且我想得太过简单。

这里数据增广的真正做法是,“不让网络看见图片两次”。实现是在图片每次输入网络的时候都对它进行随机复数次变换。

关键点如下:

1. 让网络无法看见同一张图片不是虚话,它的真正做法是,图片每次输入的时候做随机变换

2. 这种方法的核心在于,不会引入新的信息,但提高了信息的利用率。

3. 缺点:数据自相关性

注意:数据增广只是用在训练集上,和dropout一样。想一下,val set的作用就是predict一下,拿到准确率,没有多次输入.

使用ImageDataGenerator 进行数据增广

生成器构造器,设置一些数据增广的参数

train_datagen = ImageDataGenerator(

    rescale=1./255,

    rotation_range=40,

    width_shift_range=0.2,

    height_shift_range=0.2,

    shear_range=0.2,

    zoom_range=0.2,

    horizontal_flip=True,)

test_datagen = ImageDataGenerator(rescale=1./255)

从构造器中得到生成器

train_generator = train_datagen.flow_from_directory(

    train_dir,

    target_size=(150150),

    batch_size=32,

    class_mode='binary')

validation_generator = test_datagen.flow_from_directory(

    validation_dir,

    target_size=(150150),

    batch_size=32,

    class_mode='binary')

 

最新回复(0)