python - 结构相同的三个模型的不同过拟合
问题描述
我想设计三个模型,它们具有相同的结构,但最后一个模型应该有一些严重的过拟合,另一个模型的过拟合较少,最后一个模型没有过拟合。
这个想法是我想看看每个模型的最后一层对于一些测试数据有多少信息。假设我使用 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 的数量:最终,你的模型会很好地记住训练数据。如果您难以过度拟合数据,您可能需要一个更复杂的网络 - 但我怀疑情况会如此。
正好:
获得正确(没有过拟合或欠拟合)的模型可能最简单的方法是使用回调。具体来说,我们可以使用早停。如果验证损失停止改善,回调将停止训练。对于您的代码,您所要做的就是修改训练如下:
首先定义一个回调
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])
欠拟合
与过拟合类似的想法。在这种情况下,您希望尽早停止训练。仅针对有限数量的 epoch 训练您的模型。如果你发现你的模型过拟合很快,试着降低学习率。
推荐阅读
- amazon-web-services - AWS cron 作业在两个小时的时间跨度内每分钟运行一次?
- c++ - 介绍工程的 C++ 作业
- django - 如何检查唯一的 bulk_create
- reactjs - 错误:使用 `/posts` 的`href` 传递了多个孩子,但只支持一个孩子
- javascript - 如何找到反应组件的位置和宽度/高度?
- grails - 如何在grails的列表框中选择一个项目
- java - 如何从使用 java gradle shadow 插件中删除“附加项”
- node.js - 参数类型不可分配给参数类型节点 JS 项目警告
- reporting-services - SSRS 2020 报告服务器 - ERROR HTTP 错误 503。服务不可用 - 已解决...但有更好的方法吗?
- html - 我如何在 css 中实现这种表格并在正文内容上对齐