我想知道是否可以保存部分训练的Keras模型并在再次加载模型后继续训练.
这样做的原因是我将来会有更多的训练数据,我不想再次重新训练整个模型.
我正在使用的功能是:
#Partly train model
model.fit(first_training, first_classes, batch_size=32, nb_epoch=20)
#Save partly trained model
model.save('partly_trained.h5')
#Load partly trained model
from keras.models import load_model
model = load_model('partly_trained.h5')
#Continue training
model.fit(second_training, second_classes, batch_size=32, nb_epoch=20)
Run Code Online (Sandbox Code Playgroud)
编辑1:添加了完整的工作示例
使用10个时期之后的第一个数据集,最后一个纪元的损失将为0.0748,准确度为0.9863.
保存,删除和重新加载模型后,在第二个数据集上训练的模型的损失和准确性将分别为0.1711和0.9504.
这是由新的训练数据还是完全重新训练的模型引起的?
"""
Model by: http://machinelearningmastery.com/
"""
# load (downloaded if needed) the MNIST dataset
import numpy
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense
from keras.utils import np_utils
from keras.models import load_model
numpy.random.seed(7)
def baseline_model():
model = Sequential()
model.add(Dense(num_pixels, input_dim=num_pixels, init='normal', …
Run Code Online (Sandbox Code Playgroud) 我正在观看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
再次运行。
如果这会覆盖预先存在的权重,那么这是否就违背了保存模型的初衷?第一次使用新数据训练模型不是等效的吗?
在多个相似的数据集上训练模型同时保持所有数据的准确性的适当方法是什么?