我遇到了这个奇怪的问题...我使用以下代码来构建TensorFlow Saver:
tf.train.Saver(tf.all_variables(), max_to_keep=FLAGS.keep)
这应该是非常标准的。但是,当我将保存目录指向我的自定义目录(在我的用户名下)而不是“ / tmp”时,突然之间,保存的模型是诸如
translation.ckpt-329.data-00000-of-00001
translation.ckpt-329.index
translation.ckpt-329.meta
我找不到文件“ translate.ckpt-329”。
生成的检查点文件指向:
model_checkpoint_path: "/Users/.../train_dir/translate.ckpt-329"
all_model_checkpoint_paths: "/Users/.../train_dir/translate.ckpt-329"
尽管此文件不存在,并且为我恢复模型带来了麻烦。
有人可以阐明这一点吗?可能是什么问题?
感谢您的第一个答案!我猜我最大的问题是restore
方法:
原始代码使用这种方式来恢复会话:
ckpt = tf.train.get_checkpoint_state(FLAGS.train_dir)
model.saver.restore(session, ckpt.model_checkpoint_path)
V2保存失败了:(
if ckpt and tf.gfile.Exists(ckpt.model_checkpoint_path):
logging.info("Reading model parameters from %s" % ckpt.model_checkpoint_path)
model.saver.restore(session, ckpt.model_checkpoint_path)
else:
logging.info("Created model with fresh parameters.")
session.run(tf.global_variables_initializer())
TL; DR:在新的检查点格式中,传递给保护程序的“文件名”实际上用作多个文件名的前缀,并且不会写入具有该确切名称的文件。您可以通过使用tf.train.Saver
可选参数构造您的格式来使用旧的检查点格式write_version=tf.train.SaverDef.V1
。
从已保存文件的名称来看,您似乎正在使用“ V2”检查点格式,该格式已成为TensorFlow 0.12中的默认格式。这种格式将检查点数据存储在多个文件中:一个或多个数据文件(例如,translate.ckpt-329.data-00000-of-00001
在您的情况下)和一个索引文件(translate.ckpt-329.index
),该文件告诉TensorFlow每个保存的变量在数据文件中的位置。会tf.train.Saver
使用您传递的“文件名”作为这些文件名的前缀,但不会生成具有该确切名的文件。
尽管没有使用您给定的确切名称的文件,但是您可以使用从返回的值saver.save()
作为后续变量的参数saver.restore()
,并且其他检查点定位机制应继续像以前一样工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句