TensorFlow,缺少检查点文件。 saver 是不是只允许保留 5 个检查点?

Posted

技术标签:

【中文标题】TensorFlow,缺少检查点文件。 saver 是不是只允许保留 5 个检查点?【英文标题】: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构造函数中自定义 【参考方案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)

【讨论】:

以上是关于TensorFlow,缺少检查点文件。 saver 是不是只允许保留 5 个检查点?的主要内容,如果未能解决你的问题,请参考以下文章

tensorflow-训练检查点tf.train.Saver

在 Google Colab 中保存 TensorFlow 检查点

Tensorflow - Tutorial : Variables的保存与恢复

TensorFlow Saver的使用方法

Tensorflow---Saver和restore的用法

tf.train.Saver()-tensorflow中模型的保存及读取