使用数据增强时,是否可以仅使用原始图像进行验证?

数据挖掘 神经网络 深度学习 图像分类 图像识别 数据增强
2021-09-23 13:11:49

我正在研究一种多分类深度学习算法,但我正在过度拟合: 在此处输入图像描述

我的模型应该对 17 个不同品牌的太阳镜进行分类,但我只有大约 400 张来自每个品牌的图像,所以我创建了一个数据增强 x3 倍的文件夹,生成具有以下参数的图像:

datagen = ImageDataGenerator(
    rotation_range=30,
    width_shift_range=0.2,
    height_shift_range=0.2,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True,
    fill_mode='nearest')

这样做后,我得到了这些结果:

在此处输入图像描述

我不知道仅使用原始图像进行验证是否正确,或者我是否还必须使用增强图像进行验证,对我来说获得比训练更高的验证准确度也很奇怪。

3个回答

您应该对原始图像进行验证。增强功能在那里可以帮助您的模型更好地泛化,但要评估您的模型,您需要实际图像,而不是转换后的图像。

要在 keras 中执行此操作,您需要定义 的两个实例ImageDataGenerator,一个用于训练,一个用于验证。要训​​练模型,您需要将两个生成器都设置为该fit_generator函数。

train_gen = ImageDataGenerator(aug_params).flow_from_directory(train_dir)
valid_gen = ImageDataGenerator().flow_from_directory(valid_dir)

model.fit_generator(train_gen, validation_data=valid_gen)

如果您大量增加训练数据,则可以实现比训练准确度更高的验证准确度。

理想情况下,数据增强是训练管道中的一个步骤,这是将数据拆分为训练/验证/测试集之后进行的。否则,您在训练和测试中都有相同的数据点,即使它有点旋转。

所以你的训练管道可能是这样的:

          +-> training set ---> data augmentation --+
          |                                         |
          |                                         +-> model training --+
          |                                         |                    |
all data -+-> validation set -----------------------+                    |
          |                                                              +-> model testing
          |                                                              |
          |                                                              |
          +-> test set --------------------------------------------------+

您无需使用数据增强进行验证。您仅将数据 aug 用于训练(因为您没有足够的数据)。如果你有很多数据,那么数据扩充就没有意义了。

而且您需要数据增强来减少过拟合,还有其他减少过拟合的方法,例如 dropout。