第一个纪元后过度拟合
Overfitting after first epoch
我正在使用卷积神经网络(通过 Keras)作为我的面部表情识别模型(55 名受试者)。我的数据集非常难,大约 450k,有 7 classes。我已经平衡了每个主题和每个 class 标签的训练集。
我实现了一个非常简单的 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 之后,我的训练损失不断减少,而验证损失不断增加。过度拟合会很快发生吗?或者我的数据是否存在混淆问题?我还应该平衡我的测试集吗?
可能是这个任务很容易解决,在一个 epoch 之后模型已经学会了足够的知识来解决它,训练更多的 epochs 只会增加过度拟合。
但是如果你平衡了训练集而不是测试集,可能发生的情况是你正在为一个任务训练(在均匀分布的数据上进行表情识别)然后你正在测试一个稍微不同的任务,因为测试集不平衡。
我正在使用卷积神经网络(通过 Keras)作为我的面部表情识别模型(55 名受试者)。我的数据集非常难,大约 450k,有 7 classes。我已经平衡了每个主题和每个 class 标签的训练集。
我实现了一个非常简单的 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 之后,我的训练损失不断减少,而验证损失不断增加。过度拟合会很快发生吗?或者我的数据是否存在混淆问题?我还应该平衡我的测试集吗?
可能是这个任务很容易解决,在一个 epoch 之后模型已经学会了足够的知识来解决它,训练更多的 epochs 只会增加过度拟合。
但是如果你平衡了训练集而不是测试集,可能发生的情况是你正在为一个任务训练(在均匀分布的数据上进行表情识别)然后你正在测试一个稍微不同的任务,因为测试集不平衡。