为什么我的模型在做了正则化和批量归一化之后会过拟合



这是我的CNN模型结构。

def make_dcnn_model():
model = models.Sequential()
model.add(layers.Conv2D(5, (5, 5), input_shape=(9, 128,1), padding='same', strides = (1,2), activity_regularizer=tf.keras.regularizers.l1(0.001)))
model.add(layers.LeakyReLU())
model.add(BatchNormalization())
model.add(layers.AveragePooling2D((4, 4), strides = (2,4)))
model.add(layers.Conv2D(10, (5, 5),  padding='same', activity_regularizer=tf.keras.regularizers.l1(0.001)))
model.add(layers.LeakyReLU())
model.add(BatchNormalization())
model.add(layers.AveragePooling2D((2, 2), strides = (1,2)))
model.add(layers.Flatten())
model.add(layers.Dense(50, activity_regularizer=tf.keras.regularizers.l1(0.001)))
model.add(layers.LeakyReLU())
model.add(BatchNormalization())
model.add(layers.Dense(6, activation='softmax'))
return model

结果表明,该模型与训练数据拟合良好,对于验证数据,验证精度波动较大。

对7352个样本进行培训,对2947个样本进行验证Epoch 1/3000 7352/7352====================================]-3s 397us/样本-损耗:0.1016-准确度:0.9698-val_loss:4.0896-val_accurcy:0.5816纪元2/3000 7352/7352【=========================】-2s 214us/样品-损耗:0.0965-准确度:0.9727-val_loss:1.2296-val_accurcy:0.7384 Epoch 3/3000 7352/7352【==========================】-1s 198us/样本-损耗:0.0930-准确度:0.9727-val_loss:0.9901-val_accurcy:0.7855 Epoch 4/3000 7352/7352====================================]-2s 211us/样本-损耗:0.1013-精度:0.9701-val_loss:0.5319-val_accurcy:0.9114 Epoch5/3000 7352/7352【=========================】-1s 201us/样本-损耗:0.0958-准确度:0.9721-val_loss:0.6938-val_accurcy:0.8388 Epoch 6/3000 7352/7352【==========================】-2s 205us/样本-损耗:0.0925-精度:0.9743-val_loss:1.4033-val_accurcy:0.7472 Epoch 7/3000 7352/7352====================================]-1s 203us/样本-损耗:0.0948-准确度:0.9740-val_loss:0.8375-val_accurcy:0.7998

减少过拟合是一个反复试验的问题。有很多方法可以解决这个问题

尝试向模型中添加更多数据,或者在处理图像时可能会增加数据。(非常有用(

尝试通过调整图层的参数来降低模型的复杂性。

试着早点停止训练。

正则化和批量规范化非常有用,但如果没有它们的过拟合,您的模型可能已经表现得更糟了。尝试不同类型的正则化。(可能退出(

我的猜测是,通过在数据中添加更多的多样性,你的模型将减少过度填充。

最新更新