我遇到了这个奇怪的问题......我使用这段代码来构建张量流保护程序:
tf.train.Saver(tf.all_variables(), max_to_keep=FLAGS.keep)
应该是非常标准的。但是,当我将保存目录指向我的自定义目录(在我的用户名下)而不是“/ tmp”时,突然之间,保存的模型就像
这样的文件translate.ckpt-329.data-00000-的-00001
translate.ckpt-329.index
translate.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())
答案 0 :(得分:4)
TL; DR:在新的检查点格式中,传递给保护程序的“文件名”实际上用作多个文件名的前缀,并且不会写入具有该确切名称的文件。您可以使用可选参数write_version=tf.train.SaverDef.V1
构建tf.train.Saver
来使用旧的检查点格式。
从保存文件的名称中可以看出,您使用的是“V2”检查点格式,该格式成为TensorFlow 0.12中的默认格式。此格式将检查点数据存储在多个文件中:一个或多个数据文件(例如,在您的情况下为translate.ckpt-329.data-00000-of-00001
)和一个索引文件(translate.ckpt-329.index
),它告诉TensorFlow每个保存的变量位于数据文件中的位置。 tf.train.Saver
使用您传递的“文件名”作为这些文件名称的前缀,但不会生成具有该名称的文件。
虽然没有文件具有您给出的确切名称,但您可以使用从saver.save()
返回的值作为后续saver.restore()
的参数,其他检查点定位机制应继续作为之前。