【问题标题】:Overfitting after first epoch第一个 epoch 后过拟合
【发布时间】:2017-02-18 01:48:00
【问题描述】:

我使用卷积神经网络(通过 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 之后,我的训练损失不断减少,而验证损失增加。过拟合会很快发生吗?还是我的数据混乱有问题?我还应该平衡我的测试集吗?

【问题讨论】:

  • 如果您认为过拟合是您的问题,您可以尝试各种方法来解决过拟合,例如数据增强 (keras.io/preprocessing/image)、更多 dropout、更简单的网络架构等等。

标签: machine-learning computer-vision neural-network deep-learning conv-neural-network


【解决方案1】:

可能是该任务很容易解决,并且在一个 epoch 后模型已经学会了足够的知识来解决它,并且训练更多 epoch 只会增加过度拟合。

但是,如果您平衡了训练集而不是测试集,则可能发生的情况是您正在为一项任务进行训练(对均匀分布的数据进行表情识别),然后您正在测试一项略有不同的任务,因为测试集不平衡。

【讨论】:

  • 另外,我在测试前洗牌了我的测试集。无论哪种方式,平衡测试集是否有助于提高我的测试准确性?
  • 打乱测试集不会影响测试的准确性,因为您使用的性能指标不依赖于样本的顺序。至于第二个问题,如果低准确度是训练集和测试集不是来自相似分布的问题,那么平衡测试集将提高测试准确度。如果这是一个巨大的过度拟合问题,那将无济于事。
  • 谢谢,我会注意的,听起来很清楚! :)
猜你喜欢
  • 2020-12-03
  • 2021-08-28
  • 2021-05-27
  • 2019-11-11
  • 2019-09-16
  • 2021-06-28
  • 2021-08-19
  • 2018-03-03
  • 1970-01-01
相关资源
最近更新 更多