第一个 epoch 后过拟合

数据挖掘 机器学习 神经网络 计算机视觉 卷积神经网络
2021-09-30 09:41:42

我正在使用卷积神经网络(通过 Keras)作为我的面部表情识别模型(55 名受试者)。我的数据集非常难,大约 450k,有 7 个类。我已经平衡了每个主题和每个班级标签的训练集。

我实现了一个非常简单的 CNN 架构(带有实时数据增强):

model = Sequential()
model.add(Convolution2D(32, 3, 3, border_mode=borderMode, init=initialization,  input_shape=(48, 48, 3)))
model.add(BatchNormalization())
model.add(PReLU())
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())
model.add(Dense(256))
model.add(BatchNormalization())
model.add(PReLU())
model.add(Dropout(0.5))

model.add(Dense(nb_output))
model.add(Activation('softmax'))

在第一个 epoch 之后,我的训练损失不断减少,而验证损失增加。过拟合会很快发生吗?还是我的数据混乱有问题?我还应该平衡我的测试集吗?

2个回答

如此庞大的数据集(450k)不太可能在一个 epoch 之后过拟合。

尝试运行代码 20-30 个 epoch,看看你是否发现验证集错误有任何减少(验证准确度增加。)

如果(除非您使用自适应学习参数),请尝试更改您的学习率

平衡训练集是有道理的,不需要平衡测试集。无论如何,你不应该在这样一个简单的模型中看到过度拟合。

验证训练集和验证集变量是否完全相同是很有趣的,如果你没有在一个集合中进行任何转换,并且由于某种原因没有在另一个中进行转换。

我了解您正在进行坚持交叉验证,尝试 k 折交叉验证或引导程序可以提供帮助。