首页 > 解决方案 > 结构相同的三个模型的不同过拟合

问题描述

我想设计三个模型,它们具有相同的结构,但最后一个模型应该有一些严重的过拟合,另一个模型的过拟合较少,最后一个模型没有过拟合。

这个想法是我想看看每个模型的最后一层对于一些测试数据有多少信息。假设我使用 mnist 数据集作为训练和测试集,所有模型的结构应该是这样的。

# Network architecture
network = Sequential()

# input layer
network.add(Dense(512, activation='relu', input_shape=(28*28,) ))

# Hidden layers
network.add(Dense(64, activation='relu', name='features'))

# Output layer
network.add((Dense(10,activation='softmax')))

network.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

#train the model
history = network.fit(train_img, train_label, epochs=50, batch_size=256, validation_split=0.2)

所以现在的问题是如何改变这个训练模型来满足我对三种不同过拟合的模型的需求。

我是机器学习主题的新手,我希望我能尽可能地解释我的问题。

提前致谢

标签: pythonmachine-learningdeep-learningtf.keras

解决方案


过拟合:

MNIST 数据集相当简单,因此它应该很容易与您建议的模型过度拟合。增加 epoch 的数量:最终,你的模型会很好地记住训练数据。如果您难以过度拟合数据,您可能需要一个更复杂的网络 - 但我怀疑情况会如此。

正好:

获得正确(没有过拟合或欠拟合)的模型可能最简单的方法是使用回调。具体来说,我们可以使用早停。如果验证损失停止改善,回调将停止训练。对于您的代码,您所要做的就是修改训练如下:

  1. 首先定义一个回调

    callback_es = tf.keras.callbacks.EarlyStopping(monitor = 'val_loss')
    
  2. 将回调添加到您的训练中

    history = network.fit(train_img, train_label, epochs=50, batch_size=256, validation_split=0.2, callback = [callback_es])
    

欠拟合

与过拟合类似的想法。在这种情况下,您希望尽早停止训练。仅针对有限数量的 epoch 训练您的模型。如果你发现你的模型过拟合很快,试着降低学习率。


推荐阅读