背景
我正在看关于机器学习的流行的YouTube速成班。
在3:35:50,他提到这个模型可能太适合了,所以再一次用更少的时间来适应它。
既然他没有恢复模型,这不等于用同样的数据来拟合模型,从而继续过度训练它吗?
我的问题
假设您已经创建了一个模型并准备好了数据。
你跑:
model.fit(train_images, train_labels, epochs=10)
model.fit(train_images, train_labels, epochs=8)相当于运行:
model.fit(train_images, train_labels, epochs=18)或:
model.fit(train_images, train_labels, epochs=8)如果是以前安装的数据是覆盖的。,为什么第二次运行model.fit是从先前模型的准确性开始的呢?
在关于保存和培训模型的多个 其他 问题中,公认的解决方案是加载以前经过培训的模型,然后再次运行model.fit。
如果这将覆盖先前存在的权重,这难道不是一开始就破坏了保存模型的目的吗?第一次在新数据上对模型进行培训,难道不是等同的吗?
在多个相似的数据集之间训练一个模型,同时保持所有数据的准确性的适当方法是什么?
发布于 2020-05-31 18:47:37
既然他没有恢复模型,这不等于用同样的数据来拟合模型,从而继续过度训练它吗?
你说得对!为了检查在他的示例中哪个时期会更好,他应该再次编译网络(也就是说,再次执行上面的单元格)。
只要记住,当您再次实例化模型时,它很可能以全新的权重开始,与过去的权重完全不同(除非手动更改此值)。因此,即使你保持相同数量的历元,你的最终准确度可能会根据初始权重而变化。
这两个命令等效吗?
model.fit(train_images, train_labels, epochs=10)
model.fit(train_images, train_labels, epochs=8)和
model.fit(train_images, train_labels, epochs=18)No.
在第一种情况下,您使用一些权重X对网络进行10次训练,然后将权重更新为一些值y。然后,您将再次培训您的网络,尽管您的所有培训设置8次,但现在您正在使用的权重X+y网络。
对于第二种情况,您将使用权重X 18次通过所有的培训数据来训练您的网络。
,这不一样!
发布于 2020-05-31 18:32:42
在运行with时
model.fit(train_images, train_labels, epochs=10)
model.fit(train_images, train_labels, epochs=8)正如您前面提到的,模型不会被重新初始化,因此模型对象将在其中包含上一列的值,因此继续。
刚刚意识到这个模型是在colab运行的。
当他跑的时候
model.fit(train_images, train_labels, epochs=10)他第一次训练它,发现它太合适了,然后他的目标是减少到8,然后尝试它。
model.fit(train_images, train_labels, epochs=8)他想要做的是运行8个时期,但是由于它在colab中,而且model.fit()从第一次运行开始仍然在对象中,它的行为就好像它运行了18个历元,并且安装过高。
如何避免过拟合,其中一种方法是使用EarlyStopping和ModelCheckpoint。
发布于 2020-05-31 19:33:27
为了避免过度拟合,您可以添加Dropout层,它将删除连接的%,您只需将其添加到密集层之间的模型中即可。
from keras.layers import Dropout
Dropout(0.2) # droping 20% only in traininghttps://stackoverflow.com/questions/62120508
复制相似问题