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 检查点