【问题标题】:How to continue training model using ModelCheckpoint of Keras如何使用 Keras 的 ModelCheckpoint 继续训练模型
【发布时间】:2017-04-21 15:11:28
【问题描述】:

我是 Keras 的新用户。我对使用 Keras 的训练过程有疑问。

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

在第一个训练阶段,经过 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)
            ]   

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

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)
            ]

但我有一个问题。第二次训练的第一个时期给出 1.20000 的 val_loss,脚本生成模型“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'
...

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

【问题讨论】:

  • 谁能帮帮我?非常感谢!

标签: machine-learning callback deep-learning keras checkpoint


【解决方案1】:

有趣的案例,可能是一个很大的改进...我认为 API 目前不支持这样的解决方案,除了制作自己的回调函数。

我认为这不会那么难。您可以将其基于原始 modelcheckpointcallback 类,然后进行更改。

这一行: https://github.com/fchollet/keras/blob/master/keras/callbacks.py#L390

它存储正在 logget 的项目的当前最佳值,根据情况在 if 语句中将其初始化为 -inf/inf。

在您的情况下,您必须找到一种方法来读取文件的文件名,进行一些字符串操作,然后添加它。

我建议将其添加为单独的语句.. 或 else if

为了避免过多地弄乱核心代码。

希望对您有所帮助..

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,直到我也问了这个问题才看到你的问题。根据我得到的反馈,我编写了一个简单的回调来保存和恢复最佳训练值(例如 val_loss)。你可以在这里找到它:How to preserve metric values over training sessions in Keras?

    【讨论】:

      【解决方案3】:

      我最近遇到了类似的问题,尽管上面提供的解决方案效果很好。我尝试了一种更简单的方法,在训练过程完成后,我将 ModelCheckpoint 对象保存到 pickle 文件中。

      然后在随后的运行中,我将恢复 pickle 对象,而不是创建 ModelCheckpoint 的新实例,类似于我们恢复模型的方式。

      【讨论】:

        猜你喜欢
        • 2018-01-05
        • 2017-07-28
        • 2020-12-13
        • 1970-01-01
        • 2020-06-20
        • 1970-01-01
        • 2018-10-16
        • 2018-08-28
        • 2020-06-16
        相关资源
        最近更新 更多