如果这个问题被认为是离题或普遍被认为是糟糕的问题,请原谅我,我是计算机视觉和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 layersmodel.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 classesmodel.add(Dense(10))model.add(Activation("softmax"))# Compiling the model using some basic parametersmodel.compile(loss="sparse_categorical_crossentropy" ,optimizer="adam" ,metrics=["accuracy"])
我能够将准确率从大约90%(无增强)提高到大约97%(使用增强),然而训练准确率和验证准确率之间的差异仍然相似。
使用数据增强的图表:
我读到过,训练和验证准确率/损失未收敛且差异很大是过拟合的迹象。
我的CNN模型是否属于这种情况?我还能做些什么来改进我的模型?
完整代码可以在我的GitHub上找到
https://github.com/jwngo/SimpleImageClassifier
感谢大家,我很感激你们的时间。
编辑:对于增强后的数据集,训练集有29355张图片,验证集有7331张图片。准确率之间的差异为0.9972(训练)对0.9750(验证),损失之间的差异为0.0102(训练)对0.1245(验证)
验证图像也进行了增强,我将更改为仅使用未增强的图像。
回答:
你可以使用一些正则化方法(https://www.analyticsvidhya.com/blog/2018/04/fundamentals-deep-learning-regularization-techniques/),例如dropout。训练和验证准确率之间的差异是多少?验证集有多大?