CNN即使数据集很小也永远不会过拟合

时间:2019-05-17 14:56:29

标签: python machine-learning keras conv-neural-network

我正在使用CNN对小型不平衡数据集上的图像进行分类。 3500张图片,共16类。我这样做:

  • 使用Keras增强器进行数据增强
  • 类别权重

我使用以下模型。


model = Sequential()
model.add(Conv2D(24,kernel_size=3,padding='same',activation='relu',
        input_shape=(n,n,1)))
model.add(MaxPool2D())
model.add(Conv2D(48,kernel_size=3,padding='same',activation='relu'))
model.add(MaxPool2D())
model.add(Conv2D(64,kernel_size=3,padding='same',activation='relu'))
model.add(MaxPool2D(padding='same'))
model.add(Conv2D(96,kernel_size=3,padding='same',activation='relu'))
model.add(MaxPool2D(padding='same'))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(16, activation='softmax'))
model.compile(optimizer="adam", loss="categorical_crossentropy",metrics=['accuracy'])   


由于我的数据集非常不平衡,因此验证准确性或验证损失对我来说不是检查过度拟合的好指标。我使用召回率和F1作为指标来查看我的模型在验证中是否表现良好。

当我运行模型时,验证回忆会卡住(它永远不会减少),而训练精度会不断提高。

在X纪元后召回停止增加时停止训练模型是否正确?即使我的训练集准确性仍在提高?

第二个问题:当我在不进行数据扩充的情况下训练模型时,我的模型在训练集上的准确性达到了99%,而验证回想率却从未降低?看来我的模型无法过拟合...在这种情况下我该怎么办?

0 个答案:

没有答案