小编Ngh*_*ong的帖子

如何使用 Keras 的 ModelCheckpoint 继续训练模型

我是 Keras 的新用户。我有一个关于使用 Keras 的训练程序的问题。

由于我的服务器的时间限制(每个作业只能在不到 24 小时内运行),我必须使用多个 10-epoch 周期来训练我的模型。

在第 1 个训练阶段,10 个 epoch 后,使用 Keras 的 ModelCheckpoint 存储最佳模型的权重。

conf = dict()
conf['nb_epoch'] = 10
callbacks = [
             ModelCheckpoint(filepath='/1st_{epoch:d}_{val_loss:.5f}.hdf5',
             monitor='val_loss', save_best_only=True,
             save_weights_only=False, verbose=0)
            ]   
Run Code Online (Sandbox Code Playgroud)

假设我得到最佳模型:'1st_10_1.00000.hdf5'。接下来,我继续使用 10 个时期训练我的模型,并按如下方式存储最佳模型的权重。

model.load_weights('1st_10_1.00000.hdf5')
model.compile(...)
callbacks = [
             ModelCheckpoint(filepath='/2nd_{epoch:d}_{val_loss:.5f}.hdf5',
             monitor='val_loss', save_best_only=True,
             save_weights_only=False, verbose=0)
            ]
Run Code Online (Sandbox Code Playgroud)

但我有一个问题。第二次训练的第一个 epoch 给出 val_loss 为 1.20000,脚本生成模型“2nd_1_1.20000.hdf5”。显然,新的 val_loss 大于第一次训练的最佳 val_loss (1.00000)。并且第二次训练的以下时期似乎是基于模型“2nd_1_1.20000.hdf5”而不是“1st_10_1.00000.hdf5”进行训练的。

'2nd_1_1.20000.hdf5'
'2nd_1_2.15000.hdf5'
'2nd_1_3.10000.hdf5'
'2nd_1_4.05000.hdf5'
...
Run Code Online (Sandbox Code Playgroud)

我认为不使用第一个训练期的更好结果是一种浪费。任何人都可以指出修复它的方法,或者告诉程序它应该使用前一个训练周期的最佳模型的方法吗?提前谢谢了!

machine-learning callback checkpoint deep-learning keras

5
推荐指数
1
解决办法
1529
查看次数