首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python多次运行model.fit而不恢复模型

Python多次运行model.fit而不恢复模型
EN

Stack Overflow用户
提问于 2020-05-31 18:10:21
回答 3查看 3.2K关注 0票数 2

背景

我正在看关于机器学习的流行的YouTube速成班

3:35:50,他提到这个模型可能太适合了,所以再一次用更少的时间来适应它。

既然他没有恢复模型,这不等于用同样的数据来拟合模型,从而继续过度训练它吗?

我的问题

假设您已经创建了一个模型并准备好了数据。

你跑:

代码语言:javascript
运行
复制
model.fit(train_images, train_labels, epochs=10)
model.fit(train_images, train_labels, epochs=8)

相当于运行:

代码语言:javascript
运行
复制
model.fit(train_images, train_labels, epochs=18)

或:

代码语言:javascript
运行
复制
model.fit(train_images, train_labels, epochs=8)

如果是以前安装的数据是覆盖的。,为什么第二次运行model.fit是从先前模型的准确性开始的呢?

在关于保存和培训模型的多个 其他 问题中,公认的解决方案是加载以前经过培训的模型,然后再次运行model.fit

如果这将覆盖先前存在的权重,这难道不是一开始就破坏了保存模型的目的吗?第一次在新数据上对模型进行培训,难道不是等同的吗?

在多个相似的数据集之间训练一个模型,同时保持所有数据的准确性的适当方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-05-31 18:47:37

既然他没有恢复模型,这不等于用同样的数据来拟合模型,从而继续过度训练它吗?

你说得对!为了检查在他的示例中哪个时期会更好,他应该再次编译网络(也就是说,再次执行上面的单元格)。

只要记住,当您再次实例化模型时,它很可能以全新的权重开始,与过去的权重完全不同(除非手动更改此值)。因此,即使你保持相同数量的历元,你的最终准确度可能会根据初始权重而变化。

这两个命令等效吗?

代码语言:javascript
运行
复制
model.fit(train_images, train_labels, epochs=10)
model.fit(train_images, train_labels, epochs=8)

代码语言:javascript
运行
复制
model.fit(train_images, train_labels, epochs=18)

No.

在第一种情况下,您使用一些权重X对网络进行10次训练,然后将权重更新为一些值y。然后,您将再次培训您的网络,尽管您的所有培训设置8次,但现在您正在使用的权重X+y网络。

对于第二种情况,您将使用权重X 18次通过所有的培训数据来训练您的网络。

,这不一样!

票数 4
EN

Stack Overflow用户

发布于 2020-05-31 18:32:42

在运行with时

代码语言:javascript
运行
复制
model.fit(train_images, train_labels, epochs=10)
model.fit(train_images, train_labels, epochs=8)

正如您前面提到的,模型不会被重新初始化,因此模型对象将在其中包含上一列的值,因此继续。

刚刚意识到这个模型是在colab运行的。

当他跑的时候

代码语言:javascript
运行
复制
model.fit(train_images, train_labels, epochs=10)

他第一次训练它,发现它太合适了,然后他的目标是减少到8,然后尝试它。

代码语言:javascript
运行
复制
model.fit(train_images, train_labels, epochs=8)

他想要做的是运行8个时期,但是由于它在colab中,而且model.fit()从第一次运行开始仍然在对象中,它的行为就好像它运行了18个历元,并且安装过高。

如何避免过拟合,其中一种方法是使用EarlyStopping和ModelCheckpoint。

票数 2
EN

Stack Overflow用户

发布于 2020-05-31 19:33:27

为了避免过度拟合,您可以添加Dropout层,它将删除连接的%,您只需将其添加到密集层之间的模型中即可。

代码语言:javascript
运行
复制
from keras.layers import Dropout
Dropout(0.2)  # droping 20% only in training
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62120508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档