关于具有相同结构的三个模型的不同过拟合

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

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

# 网络架构
network = Sequential()
# 输入层
network.add(Dense(512, activation='relu', input_shape=(28*28,) ))
# 隐藏层
network.add(Dense(64, activation='relu', name='features'))
# 输出层
network.add((Dense(10,activation='softmax')))
network.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# 训练模型
history = network.fit(train_img, train_label, epochs=50, batch_size=256, validation_split=0.2)

那么现在的问题是,如何修改这个训练模型以满足我对具有不同过拟合的三个模型的需求。

我在机器学习方面是新手,希望我已经尽可能清楚地解释了我的问题。

提前感谢


回答:

过拟合:

MNIST数据集相对简单,因此使用你建议的模型很容易过拟合。增加训练轮数:最终,你的模型会很好地记住训练数据。如果你发现很难让数据过拟合,可能需要一个更复杂的网络——但我认为这种情况不太可能发生。

恰到好处:

获得一个恰到好处的模型(没有过拟合或欠拟合)可能最简单的办法是使用回调。具体来说,我们可以使用提前停止。这个回调会在验证损失停止改善时停止训练。对于你的代码,你只需按如下方式修改训练:

  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])

欠拟合

与过拟合的想法类似。在这种情况下,你希望尽早停止训练。只训练模型有限的几个轮次。如果你发现你的模型过快地过拟合,可以尝试降低学习率。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注