【问题标题】:Tensorflow, missing checkpoint files. Does saver only allow for keeping 5 check points?TensorFlow,缺少检查点文件。 saver 是否只允许保留 5 个检查点?
【发布时间】:2016-11-10 22:16:59
【问题描述】:

我正在使用 tensorflow,并且一直在训练一些模型,并在每个 epoch 之后使用 tf.saver() 方法保存它们。我能够很好地保存和加载模型,并且我正在以通常的方式执行此操作。

with tf.Graph().as_default(), tf.Session() as session:
    initialiser = tf.random_normal_initializer(config.mean, config.std)

    with tf.variable_scope("model",reuse=None, initializer=initialiser):
        m = a2p(session, config, training=True)

    saver = tf.train.Saver()   
    ckpt = tf.train.get_checkpoint_state(model_dir)
    if ckpt and tf.gfile.Exists(ckpt.model_checkpoint_path)
        saver.restore(session, ckpt.model_checkpoint_path)
    ...
    for i in range(epochs):
       runepoch()
       save_path = saver.save(session, '%s.ckpt'%i)

我的代码设置为为每个 epoch 保存一个模型,该模型应该被相应地标记。但是,我注意到在十五个时期的训练之后,我只有最后五个时期(10、11、12、13、14)的检查点文件。文档没有说明这一点,所以我不知道为什么会这样。

保护程序只允许保留五个检查点还是我做错了什么?

有没有办法确保保留所有检查点?

【问题讨论】:

  • 默认为5,可在Saver构造函数中自定义

标签: python-2.7 tensorflow


【解决方案1】:

您可以通过设置默认为 5 的 max_to_keep 参数来选择create your Saver object 时要保存的检查点数。

saver = tf.train.Saver(max_to_keep=10000)

【讨论】:

  • 在大多数情况下我更喜欢“keep_checkpoint_every_n_hours”参数。
  • 我不明白为什么首先有默认值,如果我使用Saver 我这样做是为了保存一些东西,为什么我要扔掉我明确想要保存的东西?
  • @gokul_uf 如果您的模型有很多参数,检查点可能会非常大。我假设已选择默认值以避免耗尽存储空间。我猜这是两种邪恶之间的权衡。
  • @Styrke 同意模型可以很大,但存储空间又便宜又充足。而 GPU 内存和计算既不便宜也不丰富。我敢肯定,大多数人宁愿醒来时发现 HDD 的可用空间不足,而不是担心他们的数据去了哪里。
  • @Styrke 你能在训练后恢复丢失的检查点吗?就像之前保存的不再保存的检查点一样?
【解决方案2】:

设置max_to_keep=None 实际上使 Saver 保留所有检查点。 例如,

saver = tf.train.Saver(max_to_keep=None)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2021-10-24
    • 2016-03-10
    相关资源
    最近更新 更多