新的检查点格式生成三个文件:model.ckpt-1000.data-00000-of-00001
, model.ckpt-1000.meta
, model.ckpt-1000.index
. 旧的检查点格式只生成两个文件:model.ckpt-1000
和model.ckpt-1000.meta
.
当我使用代码saver.restore(sess, './model.ckpt-1000')
恢复使用新检查点格式编写的模型时,它可以成功恢复模型。现在当前目录有三个文件model.ckpt-1000.data-00000-of-00001
,model.ckpt-1000.meta
, model.ckpt-1000.index
. 如果我删除model.ckpt-1000.index
,则无法恢复模型。错误信息:DataLossError (see above for traceback): Unable to open table file ./model.ckpt-1000: 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?
。
但我注意到 tensorflow 预训练模型只有一个文件:*.ckpt
. 当我使用tensorflow提供的预训练模型时,它可以成功恢复。它不需要*.index
文件。
我的 tensorflow 版本是 1.1.0。
它是如何保存模型的?它是否使用旧的检查点格式?
我相信它确实使用了旧的检查点格式。这是我用来验证的一个简单示例:
import tensorflow as tf
slim = tf.contrib.slim
x = tf.placeholder(tf.float32, [None, 16])
y = slim.fully_connected(x, 4)
saver_v1 = tf.train.Saver(write_version=tf.train.SaverDef.V1)
saver_v2 = tf.train.Saver()
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
saver_v1.save(sess, 'model_v1.ckpt',
write_meta_graph=False,
write_state=False)
saver_v2.save(sess, 'model_v2.ckpt',
write_meta_graph=False,
write_state=False)
ls model*
运行脚本后的结果:
model_v1.ckpt model_v2.ckpt.data-00000-of-00001 model_v2.ckpt.index
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句