第一轮训练后的过拟合问题

8
我正在使用卷积神经网络(通过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'))

在第一个时期之后,我的训练损失持续下降,而验证损失增加。那么过度拟合会这么快发生吗?或者我的数据存在问题导致混淆?我是否应该平衡我的测试集?

如果你认为过拟合是你的问题,你可以尝试各种方法来解决过拟合,例如数据增强(https://keras.io/preprocessing/image/),更多的dropout,更简单的网络架构等等。 - Thomas Pinetz
1个回答

4

可能任务很容易解决,在一个epoch后,模型已经学会了足够的知识来解决问题,再训练更多的epochs只会增加过拟合。

但是如果你平衡了训练集而没有平衡测试集,可能会出现这样的情况:你训练了一个任务(对均匀分布数据进行表情识别),然后在稍微不同的任务上进行测试,因为测试集不是平衡的。


另外,我在测试之前对我的测试集进行了洗牌。无论如何,平衡测试集是否有助于提高我的测试准确性? - Renz
1
将测试集洗牌不会对测试准确性产生影响,因为您使用的性能指标不依赖于样本的顺序。至于第二个问题,如果低准确性是由于训练和测试集不来自类似的分布,则平衡测试集将提高测试准确性。如果这是巨大过拟合的问题,它帮助不大。 - Guillem Cucurull
谢谢,我会记住的,听起来对我很清楚!:) - Renz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接