Tensorflow,缺少检查点文件。saver只允许保留5个检查点吗?

5

我正在使用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)

我的代码设置了保存每个时期的模型,并应该按相应标签进行标记。然而,我注意到在训练的15个时期后,我只有最后五个时期(10、11、12、13、14)的检查点文件。文档没有提到这一点,所以我不知道为什么会发生这种情况。
是不是保存器只允许保留五个检查点文件,还是我的操作出错了?
有没有方法确保所有检查点都被保留?

1
5是默认值,您可以在Saver构造函数中进行自定义。 - Yaroslav Bulatov
2个回答

10

通过设置 max_to_keep 参数,您可以选择在创建 Saver 对象 时保存多少个检查点。该参数的默认值为 5。

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

2
在大多数情况下,我更喜欢"keep_checkpoint_every_n_hours"参数。 - etarion
2
我不明白为什么一开始会有默认值,如果我使用“Saver”,我这样做是为了保存某些东西,为什么我要丢掉我明确想要保存的东西呢? - gokul_uf
@gokul_uf 如果您的模型具有许多参数,则检查点可能会非常大。我认为选择默认值是为了避免存储空间不足。我猜这是两个恶魔之间的权衡。 - Styrke
1
@Styrke 同意模型可能会非常大,但存储空间便宜且充足。而GPU内存和计算资源既不便宜也不充足。我相信大多数人宁愿面对硬盘空间不足的问题,也不愿为数据丢失而陷入恐慌。 - gokul_uf
@Styrke,你能恢复训练后丢失的检查点吗?就像之前保存的检查点,现在不再保存了吗? - Chaine

2

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接