相同结构的三个模型的不同过拟合
Different overfitting for three models with the same structure
我想设计三个模型,它们具有相同的结构,但最后其中一个应该有一些严重的过拟合,另一个模型过拟合较少,最后一个模型没有过拟合。
我的想法是,我想查看每个模型的最后一层中存在多少测试数据的信息。假设我使用 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)
所以现在的问题是如何更改满足我对具有不同过拟合的三个模型的需求的训练模型。
我是机器学习主题的新手,希望我已经尽可能详细地解释了我的问题。
提前致谢
过拟合:
MNIST 数据集相当简单,因此应该很容易与您建议的模型过度拟合。增加 epoch 的数量:最终,你的模型会很好地记住训练数据。如果您难以过度拟合数据,您可能需要一个更复杂的网络 - 但我怀疑情况会如此。
恰到好处:
可能最简单的方法是使用回调来获得恰到好处的模型(没有过拟合或欠拟合)。具体来说,我们可以使用early stopping。如果验证损失停止改善,回调将停止训练。对于你的代码,你所要做的就是修改训练如下:
首先定义一个回调
callback_es = tf.keras.callbacks.EarlyStopping(monitor = 'val_loss')
将回调添加到您的训练中
history = network.fit(train_img, train_label, epochs=50, batch_size=256, validation_split=0.2, callback = [callback_es])
欠拟合
与过度拟合类似的想法。在这种情况下,您想尽早停止训练。仅在有限数量的时期内训练您的模型。如果您发现您的模型过拟合很快,请尝试降低学习率。
我想设计三个模型,它们具有相同的结构,但最后其中一个应该有一些严重的过拟合,另一个模型过拟合较少,最后一个模型没有过拟合。
我的想法是,我想查看每个模型的最后一层中存在多少测试数据的信息。假设我使用 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)
所以现在的问题是如何更改满足我对具有不同过拟合的三个模型的需求的训练模型。
我是机器学习主题的新手,希望我已经尽可能详细地解释了我的问题。
提前致谢
过拟合:
MNIST 数据集相当简单,因此应该很容易与您建议的模型过度拟合。增加 epoch 的数量:最终,你的模型会很好地记住训练数据。如果您难以过度拟合数据,您可能需要一个更复杂的网络 - 但我怀疑情况会如此。
恰到好处:
可能最简单的方法是使用回调来获得恰到好处的模型(没有过拟合或欠拟合)。具体来说,我们可以使用early stopping。如果验证损失停止改善,回调将停止训练。对于你的代码,你所要做的就是修改训练如下:
首先定义一个回调
callback_es = tf.keras.callbacks.EarlyStopping(monitor = 'val_loss')
将回调添加到您的训练中
history = network.fit(train_img, train_label, epochs=50, batch_size=256, validation_split=0.2, callback = [callback_es])
欠拟合
与过度拟合类似的想法。在这种情况下,您想尽早停止训练。仅在有限数量的时期内训练您的模型。如果您发现您的模型过拟合很快,请尝试降低学习率。