如何在Tensorflow r12中按文件名还原模型?
tensorflow
23
0

我已经运行了分布式mnist示例: https : //github.com/tensorflow/tensorflow/blob/r0.12/tensorflow/tools/dist_test/python/mnist_replica.py

虽然我已经设定

saver = tf.train.Saver(max_to_keep=0)

在以前的版本(如r11)中,我可以运行每个检查点模型并评估模型的精度。这给了我关于精度与全局步长(或迭代)进度的图。

在r12之前,tensorflow检查点模型保存在两个文件中: model.ckpt-1234model-ckpt-1234.meta 。可以像saver.restore(sess,'model.ckpt-1234')这样传递model.ckpt-1234文件名来恢复模型。

但是,我注意到在r12中,现在有三个输出文件model.ckpt-1234.data-00000-of-000001model.ckpt-1234.indexmodel.ckpt-1234.meta

我看到还原文档说应该提供诸如/train/path/model.ckpt的路径来代替文件名。有什么方法可以一次加载一个检查点文件以对其进行评估吗?我尝试传递model.ckpt-1234.data-00000-of-000001model.ckpt-1234.indexmodel.ckpt-1234.meta文件,但是得到如下错误:

W tensorflow/core/util/tensor_slice_reader.cc:95] Could not open logdir/2016-12-08-13-54/model.ckpt-0.data-00000-of-00001: Data loss: not an sstable (bad magic number): perhaps your file is in a different file format and you need to use a different restore operator?

NotFoundError (see above for traceback): Tensor name "hid_b" not found in checkpoint files logdir/2016-12-08-13-54/model.ckpt-0.index [[Node: save/RestoreV2_1 = RestoreV2[dtypes=[DT_FLOAT], _device="/job:localhost/replica:0/task:0/cpu:0"](_recv_save/Const_0, save/RestoreV2_1/tensor_names, save/RestoreV2_1/shape_and_slices)]]

W tensorflow/core/util/tensor_slice_reader.cc:95] Could not open logdir/2016-12-08-13-54/model.ckpt-0.meta: Data loss: not an sstable (bad magic number): perhaps your file is in a different file format and you need to use a different restore operator?

我在OSP Sierra上运行,并通过pip安装了tensorflow r12。

任何指导都会有所帮助。

谢谢。

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

R12更改了检查点格式。您应该以旧格式保存模型。

import tensorflow as tf
from tensorflow.core.protobuf import saver_pb2
...
saver = tf.train.Saver(write_version = saver_pb2.SaverDef.V1)
saver.save(sess, './model.ckpt', global_step = step)

根据TensorFlow v0.12.0 RC0的发行说明

新的检查点格式成为tf.train.Saver中的默认格式。旧的V1检查点仍然可以读取;现在默认情况下,由write_version参数控制的tf.train.Saver以新的V2格式写出。它显着减少了所需的峰值内存,并减少了还原期间的延迟。

我的博客中查看详细信息。

收藏
评论

我还使用了Tensorlfow r0.12,我认为保存和恢复模型没有任何问题。以下是一个简单的代码,您可以尝试:

import tensorflow as tf

# Create some variables.
v1 = tf.Variable(tf.random_normal([784, 200], stddev=0.35), name="v1")
v2 = tf.Variable(tf.random_normal([784, 200], stddev=0.35), name="v2")

# Add an op to initialize the variables.
init_op = tf.global_variables_initializer()

# Add ops to save and restore all the variables.
saver = tf.train.Saver()

# Later, launch the model, initialize the variables, do some work, save the
# variables to disk.
with tf.Session() as sess:
  sess.run(init_op)
  # Do some work with the model.

  # Save the variables to disk.
  save_path = saver.save(sess, "/tmp/model.ckpt")
  print("Model saved in file: %s" % save_path)

# Later, launch the model, use the saver to restore variables from disk, and
# do some work with the model.
with tf.Session() as sess:
  # Restore variables from disk.
  saver.restore(sess, "/tmp/model.ckpt")
  print("Model restored.")
  # Do some work with the model

尽管在r0.12中,检查点存储在多个文件中,但是您可以使用公共前缀(在您的情况下为'model.ckpt')将其还原。

收藏
评论

您可以像这样恢复模型:

saver = tf.train.import_meta_graph('./src/models/20170512-110547/model-20170512-110547.meta')
            saver.restore(sess,'./src/models/20170512-110547/model-20170512-110547.ckpt-250000'))

路径'/ src / models / 20170512-110547 /'包含三个文件:

model-20170512-110547.meta
model-20170512-110547.ckpt-250000.index
model-20170512-110547.ckpt-250000.data-00000-of-00001

并且如果在一个目录中有多个检查点,例如:路径./20170807-231648/中有检查点文件:

checkpoint     
model-20170807-231648-0.data-00000-of-00001   
model-20170807-231648-0.index    
model-20170807-231648-0.meta   
model-20170807-231648-100000.data-00000-of-00001   
model-20170807-231648-100000.index   
model-20170807-231648-100000.meta

您会看到有两个检查点,因此可以使用此检查点:

saver =    tf.train.import_meta_graph('/home/tools/Tools/raoqiang/facenet/models/facenet/20170807-231648/model-20170807-231648-0.meta')

saver.restore(sess,tf.train.latest_checkpoint('/home/tools/Tools/raoqiang/facenet/models/facenet/20170807-231648/'))
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号