加载经过培训的Keras模型并继续培训

我想知道是否有可能保存一个部分训练过的Keras模型,并在再次加载模型后继续训练

原因是我将来会有更多的训练数据,我不想再次训练整个模型

我使用的功能有:

#部分列车模型
模型拟合(第一次培训,第一次上课,批量大小=32,nb\U历元=20)
#保存部分训练模型
型号.save('partial_trained.h5')
#负荷部分训练模型
从keras.models导入负载_模型
模型=负载模型('partial_trained.h5')
#继续训练
模型拟合(第二次培训,第二次课程,批量大小=32,nb\U历元=20)

编辑1:添加了完整的工作示例

对于10个历元后的第一个数据集,最后一个历元的损失为0.0748,精度为0.9863

保存、删除和重新加载模型后,在第二个数据集上训练的模型的损失和精度将分别为0.1711和0.9504

这是由新的训练数据还是完全重新训练的模型引起的

”&引用&引用;
建模人:http://machinelearningmastery.com/
&引用&引用&引用;
#加载(必要时下载)MNIST数据集
进口numpy
从keras.dataset导入mnist
从keras.models导入顺序
从keras.layers导入稠密
从keras.utils导入np_utils
从keras.models导入负载_模型
随机种子(7)
def基线_模型():
模型=顺序()
添加(密集(num_像素,input_dim=num_像素,init='normal',activation='relu'))
添加(密集(num_类,init='normal',activation='softmax'))
compile(loss='classifical_crossentropy',optimizer='adam',metrics=['accurity'])
回归模型
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
#加载数据
(X_列,y_列),(X_测试,y_测试)=列表负载数据()
#将每个图像的28*28图像展平为784矢量
num_pixels=X_train.shape[1]*X_train.shape[2]
X_train=X_train.reformate(X_train.shape[0],num_像素).astype('float32'))
X_test=X_test.reformate(X_test.shape[0],num_像素)。astype('float32'))
#将输入从0-255标准化为0-1
X_列=X_列/255
X_测试=X_测试/255
#一个热编码输出
y_列=np_utils.to_categorical(y_列)
y_检验=np_实用到_分类(y_检验)
num_classes=y_test.shape[1]
#建立模型
模型=基线_模型()
#部分列车模型
数据集1_x=x_列车[:3000]
数据集1_y=y_列[:3000]
model.fit(数据集1_x,数据集1_y,nb_epoch=10,批次大小=200,详细度=2)
#模型的最终评估
分数=模型。评估(X_测试,y_测试,详细度=0)
打印(“基线错误:%.2f%%”(100分[1]*100))
#保存部分训练模型
型号.save('partial_trained.h5')
del模型
#重新加载模型
模型=负载模型('partial_trained.h5')
#继续训练
数据集2_x=x_列[3000:]
数据集2_y=y_列[3000:]
model.fit(数据集2_x,数据集2_y,nb_epoch=10,批次大小=200,详细度=2)
分数=模型。评估(X_测试,y_测试,详细度=0)
打印(“基线错误:%.2f%%”(100分[1]*100))

编辑2:tensorflow.keras备注

对于tensorflow.keras,在模型拟合中将参数nb_epochs更改为epochs。导入和basemodel函数是:

导入numpy
从tensorflow.keras.datasets导入mnist
从tensorflow.keras.models导入顺序
从tensorflow.keras.layers导入稠密
从tensorflow.keras.utils导入到
从tensorflow.keras.models导入负载_模型
随机种子(7)
def基线_模型():
模型=顺序()
添加(密集(num_像素,input_dim=num_像素,activation='relu'))
添加(密集(num_类,activation='softmax'))
compile(loss='classifical_crossentropy',optimizer='adam',metrics=['accurity'])
回归模型

实际上-model.save保存案例中重新启动培训所需的所有信息。重新加载模型会破坏的唯一东西是您的优化器状态。检查-尝试保存并重新加载模型,并根据训练数据对其进行训练

发表评论