Python 这是一种过度装配的情况吗?CNN图像分类器

Python 这是一种过度装配的情况吗?CNN图像分类器,python,tensorflow,machine-learning,image-processing,computer-vision,Python,Tensorflow,Machine Learning,Image Processing,Computer Vision,请原谅,如果这个问题被认为是离题的,或者只是一个糟糕的问题,我对计算机视觉和CNN都是新手 我一共有3440张图片,总共10节课 每行每列85幅图像: 因为我的数据集中只有3440个图像,所以我使用数据扩充将我的数据集增加到34400个图像。(每幅图像增加10倍) 这是我在两个实例中使用的模型。(一次增加,一次不增加) 我能够将我的准确度从约90%(无增强)提高到约97%(有增强),但训练准确度和验证准确度之间的差异仍然相似 带有数据扩充的图形: 我曾读到,差异较大的非收敛训练和验证精度/损

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

我一共有3440张图片,总共10节课

每行每列85幅图像:

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

这是我在两个实例中使用的模型。(一次增加,一次不增加)

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

带有数据扩充的图形:

我曾读到,差异较大的非收敛训练和验证精度/损失是过度拟合的迹象

我的CNN模型就是这样吗?我还能做些什么来改进我的模型

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

谢谢大家,谢谢你们抽出时间

编辑:
对于增强数据集,训练集为29355张图像,验证集为7331张图像。准确度差为0.9972(培训)与0.9750(验证),损失差为0.0102(培训)与0.1245(验证)


验证图像也得到了增强,我将更改为仅使用非增强图像

您可以使用一些正则化()例如辍学。培训和验证准确性之间有什么区别?验证集有多大?

训练集是29355个图像,验证集是7331个图像。准确度之间的差异为0.9972 vs 0.9750,差异是损失是0.0102 vs 0.1245我认为更好的方法是在增强之前创建验证集,尤其是当您希望稍后将其与没有增强的数据的结果进行比较时。我遇到的“问题”是,在增强和未增强的数据集之间,图的形状几乎相同。训练和验证的准确度和损失是否总是一致的?我会按照您的建议在扩充之前尝试进行验证集,但这会导致验证集与测试集相比非常小(可能是960)。(>20000)这会是一个问题吗?“我遇到的‘问题’是,在增强数据集和未增强数据集之间,图形的形状几乎是相同的”->这表明增强获得了利润,但模型仍然有点过盈。你可以尝试使用一些规则。
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"])