这是过拟合的情况吗? CNN图像分类器

Posted

技术标签:

【中文标题】这是过拟合的情况吗? CNN图像分类器【英文标题】:Is this a case of overfitting? CNN Image classifier 【发布时间】:2020-03-19 07:22:56 【问题描述】:

如果这个问题被认为是题外话或者只是一个糟糕的问题,请原谅我,我一般是计算机视觉和 CNN 的新手。

我总共有 3440 张图片,总共 10 个类。

每行每列 85 张图片:

因为我的数据集中只有 3440 张图像,所以我使用数据增强将数据集增加到 34400 张图像。 (每张图片增加 10 倍)

aug = ImageDataGenerator( 
       rescale = 1./255,
       rotation_range = 20, 
       width_shift_range = 0.10,
       height_shift_range = 0.10,
       zoom_range= 0.05
       )

这是我用于两个实例的模型。 (一次有增强,一次没有)

model = Sequential() 

model.add(Conv2D(32, (3,3), input_shape = (50, 50, 3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Conv2D(64, (3, 3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Conv2D(64, (3, 3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))

# 2 hidden layers
model.add(Flatten())
model.add(Dense(128))
model.add(Activation("relu"))

model.add(Dense(128))
model.add(Activation("relu"))

# The output layer with 10 neurons, for 10 classes
model.add(Dense(10))
model.add(Activation("softmax"))

# Compiling the model using some basic parameters
model.compile(loss="sparse_categorical_crossentropy"
              ,optimizer="adam"
              ,metrics=["accuracy"])

我能够将准确度从 ~90%(无增强)提高到 ~97%(有增强),但训练准确度和验证准确度之间的差异仍然相似。

带有数据增强的图表:

我已经读过,非收敛的训练和验证准确率/损失有很大差异是过度拟合的标志。

我的 CNN 模型是这种情况吗?我还能做些什么来改进我的模型?

完整代码可以在我的github上找到

https://github.com/jwngo/SimpleImageClassifier

谢谢大家,感谢你们的时间。

编辑: 对于增强数据集,训练集是 29355 张图像,验证集是 7331 张图像。准确率的差异是 0.9972(training) vs 0.9750(validation),loss 的差异是 0.0102(training) vs 0.1245(validation)

验证图像也已增强,我将更改为仅使用非增强图像。

【问题讨论】:

【参考方案1】:

您可以使用一些正则化 (https://www.analyticsvidhya.com/blog/2018/04/fundamentals-deep-learning-regularization-techniques/) 例如退出。训练准确率和验证准确率有什么区别?验证集有多大?

【讨论】:

训练集为 29355 张图片,验证集为 7331 张图片。准确率之间的差异是 0.9972 vs 0.9750,差异是损失是 0.0102 vs 0.1245 我认为更好的方法是在增强之前创建验证集,特别是当您想稍后将其与完全没有增强的数据的结果进行比较时。 我遇到的“问题”是增强数据集和未增强数据集的图形形状几乎相同。训练和验证的准确性和损失是否总是应该收敛的? 我会按照您的建议尝试在扩充之前进行验证集,但这会导致验证集与测试集相比非常小(可能是 960)。 (>20,000) 这会是个问题吗? '我遇到的'问题'是增强数据集和未增强数据集之间的图形形状几乎相同'-> 这表明增强产生了利润,但模型仍然有点过拟合。您可以尝试使用一些规范化。

以上是关于这是过拟合的情况吗? CNN图像分类器的主要内容,如果未能解决你的问题,请参考以下文章

利用CNN进行图像分类的流程(猫狗大战为例)

对于图像分类任务,相对于全连接的DNN,CNN模型的主要优点有哪些?

keras构建卷积神经网络(CNN(Convolutional Neural Networks))进行图像分类模型构建和学习

在 CNN 提取特征之上使用 SVM - 如何进行多类分类?

我的 CNN 分类器对随机图像给出了错误的预测

CNN基础二:使用预训练网络提取图像特征