【问题标题】:Restoring Tensorflow model from .pbtxt and .meta files从 .pbtxt 和 .meta 文件恢复 TensorFlow 模型
【发布时间】:2017-11-30 11:11:06
【问题描述】:

我使用 MonitoredTrainingSession() 和检查点保护钩子 tf.train.CheckpointSaverHook() 训练了一个模型,每 1000 步保存检查点。训练后,在检查点目录中创建了以下文件:

events.out.tfevents.1511969396.cmle-training-master-ef2237c814-0-xn7pp
graph.pbtxt
model.ckpt-1.meta
model.ckpt-1001.meta
model.ckpt-2001.meta
model.ckpt-3001.meta
model.ckpt-4001.meta
model.ckpt-4119.meta

我想恢复检查点但不能,这是我的代码(假设上面的文件在目录checkpoints):

tf.train.import_meta_graph('checkpoints/model.ckpt-4139.meta')
saver = tf.train.Saver()
with tf.Session() as sess:

    ckpt = tf.train.get_checkpoint_state('./checkpoints/')
    saver.restore(sess, ckpt.model_checkpoint_path)

问题是ckptNone,我想我可能遗漏了一个文件……我做错了什么。

这就是我保存检查点的方式:

hooks=lists()
hooks.append(tf.train.CheckpointSaverHook(checkpoint_dir=checkpoint_dir, save_steps=checkpoint_iterations)

with tf.Graph().as_default():
    with tf.device(tf.train.replica_device_setter()):

        batch = model.input_fn(train_path, batch_size, epochs, 'train_queue')

        tensors = model.model_fn(batch, content_weight, style_weight, tv_weight, vgg_path, style_features,
                                 batch_size, learning_rate)

    with tf.train.MonitoredTrainingSession(master=target,
                                           is_chief=is_chief,
                                           checkpoint_dir=job_dir,
                                           hooks=hooks,
                                           save_checkpoint_secs=None,
                                           save_summaries_steps=None,
                                           log_step_count_steps=10) as sess:
        _ = sess.run(tensors)
       (...)

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    恢复完整的检查点

    tf.train.get_checkpoint_state 检查您作为参数传递的目录中的checkpoint(无扩展名)文件。 该文件的内容通常类似于:

    model_checkpoint_path: "model.ckpt-1"
    all_model_checkpoint_paths: "model.ckpt-1"
    

    如果此文件丢失,函数将返回None。 将具有该名称和内容的文本文件添加到模型文件夹中,您就可以使用已有的代码进行恢复。

    非常重要的说明:要以这种方式恢复,您需要所有检查点数据,即三个文件:.data-*.meta.index

    只恢复图形

    但是,如果您只想恢复元图,您可以通过import_meta_graph() 进行操作,详情请参阅the official TF guide

    注意(来自import_meta_graph()的定义):

    此函数将 MetaGraphDef 协议缓冲区作为输入。如果 参数是一个包含 MetaGraphDef 协议缓冲区的文件,它 从文件内容构造一个协议缓冲区。那么函数 将 graph_def 字段中的所有节点添加到当前图, 重新创建所有集合,并返回一个从构造的保护程序 saver_def 字段。

    除非.index.data-* 文件位于同一目录中,否则无法使用该保护程序。

    【讨论】:

    • 所以我缺少 .index 和 .data-* 文件...知道为什么这些不是由 CheckpointSaverHook() 生成的吗?
    • 你能显示你保存模型的代码部分吗?
    • 我已经添加了如何保存检查点并保留了我定义图形的方式,因为它可能与问题有关
    • 您的代码看起来不错,理论上CheckpointSaverHook 负责正确处理保存。我不知道为什么您有元文件,但没有索引或数据...跨度>
    • 啊哈!好收获!
    猜你喜欢
    • 2021-09-28
    • 1970-01-01
    • 2018-09-06
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 2017-08-21
    相关资源
    最近更新 更多