Tensorflow无法保存模型

时间:2016-12-30 21:55:35

标签: tensorflow

我遇到了这个奇怪的问题......我使用这段代码来构建张量流保护程序:

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())

1 个答案:

答案 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()的参数,其他检查点定位机制应继续作为之前。