动态增强:数据用完且验证准确度=0.5

问题描述

我的验证准确度停留在 50%,而我的训练准确度设法收敛到 100%。陷阱是我的数据很少:训练集中有 46 张图像,验证集中有 12 张。 因此,我在训练时增加了我的数据,但我过早地用完了数据。正如我从以前的答案中看到的那样,我应该指定steps_per_epoch。 然而,使用steps_per_epoch=46/batch_size 并没有返回那么多的迭代(如果我指定一个非常小的批量大小,则最多为10)。

我认为没有应用数据增强?我如何确定我的数据确实得到了增强?下面是我的数据增强代码

gen=ImageDataGenerator(rotation_range=180,horizontal_flip=True,vertical_flip=True,)

train_batches=gen.flow(
    x=x_train,y=Y_train,batch_size=5,subset=None,shuffle=True
    
)


val_batches=gen.flow(
    x=x_val,y=Y_val,batch_size=3,shuffle=True
)


history= model.fit(
          train_batches,batch_size=32,#  steps_per_epoch=len(x_train)/batch_size,epochs=50,verbose=2,validation_data=val_batches,validation_steps=len(x_val)/batch_size)

非常感谢您的帮助!

解决方法

我认为错误不在您的代码中。 你有一个非常小的数据集,你只使用了 2 个增强,并且(我假设)你用随机权重初始化你的模型。您的模型可能会过度拟合。

这里有一些想法可能对您有所帮助:

  1. 添加更多的论证。垂直和水平翻转 - 还不够(用你的小数据集)。考虑一下裁剪、旋转、颜色变化等。顺便说一句,这里是一个很好的图像增强教程,您可以在其中找到有关可以用于任务的数据增强类型的更多想法:https://notrocketscience.blog/complete-guide-to-data-augmentation-for-computer-vision/

  2. 迁移学习 - 对于小数据集来说是必须的。例如,如果您使用流行/默认架构,PyTorch 和 Tensorflow 允许您加载在 ImageNet 上训练的模型权重。如果您的架构是自定义的 - 下载一些开源数据集(更类似于您的任务)并使用此数据预训练模型。

  3. 适当的验证。考虑 n 折交叉验证,因为固定的训练和测试集对于小数据集不是一个好主意。您的验证准确率可能较低(例如,所有“硬”图像都在测试集中),但不是因为模型不好。

如果有帮助,请告诉我!