Python Tensorflow - 多次运行 model.fit 而不重新实例化模型

Bri*_*sco 4 python keras tensorflow

背景

我正在观看YouTube上一门热门的机器学习速成课程。

3:35:50,他提到模型可能过度拟合,因此用更少的 epoch 再次拟合。

由于他没有重新实例化模型,这是否相当于用相同的数据拟合模型,从而继续过度训练?

我的问题

假设您已创建模型并准备好数据。

你跑:

model.fit(train_images, train_labels, epochs=10)
model.fit(train_images, train_labels, epochs=8)
Run Code Online (Sandbox Code Playgroud)

这相当于运行:

model.fit(train_images, train_labels, epochs=18)
Run Code Online (Sandbox Code Playgroud)

或者:

model.fit(train_images, train_labels, epochs=8)
Run Code Online (Sandbox Code Playgroud)

如果之前拟合的数据被覆盖,为什么model.fit第二次运行会以之前模型的精度开始?

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

如果这会覆盖预先存在的权重,那么这是否就违背了保存模型的初衷?第一次使用新数据训练模型不是等效的吗?

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

iha*_*dea 6

由于他没有重新实例化模型,这是否相当于用相同的数据拟合模型,从而继续过度训练?

你是对的!为了检查在他的示例中哪个纪元数会更好,他应该再次编译网络(即再次执行上述单元)。

请记住,一般来说,每当您再次实例化模型时,它很可能会以全新的权重开始,与过去的权重完全不同(除非您手动更改)。因此,即使您保留相同数量的 epoch,您的最终精度也会根据初始权重而变化。

这两个命令等效吗?

model.fit(train_images, train_labels, epochs=10)
model.fit(train_images, train_labels, epochs=8)
Run Code Online (Sandbox Code Playgroud)

model.fit(train_images, train_labels, epochs=18)
Run Code Online (Sandbox Code Playgroud)

不。

在第一种情况下,您使用一些权重X对所有训练集进行 10 次训练,然后将权重更新为某个值y。然后,您将通过所有训练集再次训练您的网络 8 次,但现在您使用的是带有权重的网络X+y

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

这不一样!