深度学习中的数据增强

数据挖掘 深度学习 喀拉斯 张量流 计算机视觉 卷积神经网络
2022-02-07 14:22:10

我正在做一个人脸识别的深度学习项目。我正在使用预训练模型 VGG16。

数据集有大约 100 个类,每个类有 80 张图像。我将数据集拆分为 60% 的训练、20% 的验证、20% 的测试。我使用数据增强 ( ImageDataGenerator()) 来增加训练数据。

当我改变ImageDataGenerator()论点时,模型给了我不同的结果。请参阅以下案例:

情况1:

 train_datagen = ImageDataGenerator(
    rotation_range=15,
    width_shift_range=0.2,
    height_shift_range=0.2,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True,
    fill_mode='nearest')
validate_datagen = ImageDataGenerator()
Test_datagen = ImageDataGenerator()

Case1 结果:训练准确率和验证准确率高,但训练准确率较低。检查下图:

案例 1 准确度 案例1损失

案例2:

train_datagen = ImageDataGenerator(
      rescale=1./255,
      shear_range=0.2,
      zoom_range=0.2,
      horizontal_flip=True)

validate_datagen = ImageDataGenerator()
    Test_datagen = ImageDataGenerator()

案例 2 结果:过拟合。检查下图: 案例2准确度 案例2损失

案例3:

train_datagen = ImageDataGenerator(
      rescale=1./255,
      shear_range=0.2,
      zoom_range=0.2,
      horizontal_flip=True)

validate_datagen = ImageDataGenerator(rescale=1./255)
    Test_datagen = ImageDataGenerator(rescale=1./255)

Case3 结果:训练准确率和验证准确率高,但训练准确率较低。查看下图: case3 准确率 case3 损失

1- 为什么ImageDataGenerator(rescale=1./255)在 case3 中使用增强验证和测试数据会产生与 case2 不同的结果?

2-添加ImageDataGenerator(rescale=1./255)测试和验证比不添加更好吗?

3-您认为第一个案例的结果有问题吗?

1个回答
  • 1 和 2:如果你重新缩放图像,你应该在所有分区上进行:训练、验证和测试。如果您仅在训练集上重新缩放图像,那么您的网络将在验证/测试集上看到非常不同的值(0~255,vs 0.0~1.0),因此准确度很差。那是你的情况2。

  • 我没有看到任何明显的问题。