TensorFlow,为什么保存模型后会有3个文件?

TensorFlow,为什么保存模型后会有3个文件?,tensorflow,Tensorflow,阅读后,我在TensorFlow中保存了一个模型,下面是我的演示代码: #创建一些变量。 v1=tf.变量(…,name=“v1”) v2=tf.变量(…,name=“v2”) ... #添加一个op来初始化变量。 init_op=tf.global_variables_initializer() #添加ops以保存和恢复所有变量。 saver=tf.train.saver() #稍后,启动模型,初始化变量,做一些工作,保存 #将变量保存到磁盘。 使用tf.Session()作为sess: se

阅读后,我在
TensorFlow
中保存了一个模型,下面是我的演示代码:

#创建一些变量。
v1=tf.变量(…,name=“v1”)
v2=tf.变量(…,name=“v2”)
...
#添加一个op来初始化变量。
init_op=tf.global_variables_initializer()
#添加ops以保存和恢复所有变量。
saver=tf.train.saver()
#稍后,启动模型,初始化变量,做一些工作,保存
#将变量保存到磁盘。
使用tf.Session()作为sess:
sess.run(初始化操作)
#对模型做一些工作。
..
#将变量保存到磁盘。
save\u path=saver.save(sess,“/tmp/model.ckpt”)
打印(“保存在文件%s”%save\u路径中的模型)
但在那之后,我发现有3个文件

model.ckpt.data-00000-of-00001
model.ckpt.index
model.ckpt.meta
我不能通过还原
model.ckpt
文件来还原模型,因为没有这样的文件。这是我的密码

将tf.Session()作为sess的
:
#从磁盘还原变量。
saver.restore(sess,“/tmp/model.ckpt”)
那么,为什么有3个文件呢?

试试这个:

with tf.Session() as sess:
    saver = tf.train.import_meta_graph('/tmp/model.ckpt.meta')
    saver.restore(sess, "/tmp/model.ckpt")
TensorFlow保存方法保存三种文件,因为它将图形结构与变量值分开存储。
.meta
文件描述保存的图形结构,因此您需要在恢复检查点之前导入它(否则它不知道保存的检查点值对应哪些变量)

或者,您可以这样做:

# Recreate the EXACT SAME variables
v1 = tf.Variable(..., name="v1")
v2 = tf.Variable(..., name="v2")

...

# Now load the checkpoint variable values
with tf.Session() as sess:
    saver = tf.train.Saver()
    saver.restore(sess, "/tmp/model.ckpt")
def predict(image, model_name):
    """
    image -> single image, (width, height, channels)
    model_name -> model file that was saved without any extensions
    """
    with tf.Session() as sess:
        saver = tf.train.import_meta_graph('./' + model_name + '.meta')
        saver.restore(sess, './' + model_name)
        # Substitute 'logits' with your model
        prediction = tf.argmax(logits, 1)
        # 'x' is what you defined it to be. In my case it is a batch of RGB images, that's why I add the extra dimension
        return prediction.eval(feed_dict={x: image[np.newaxis,:,:,:], keep_prob_dnn: 1.0})
即使没有名为
model.ckpt
的文件,在还原时仍会以该名称引用保存的检查点。从:

用户只需要与用户指定的前缀进行交互。。。相反 任何物理路径名的

  • 元文件:描述保存的图形结构,包括GraphDef、SaverDef等;然后应用
    tf.train.import_meta_graph('/tmp/model.ckpt.meta')
    ,将还原
    Saver
    graph

  • 索引文件:它是一个字符串不可变表(tensorflow::table::table)。每个键都是张量的名称,其值是序列化的BundleEntryProto。每个BundleEntryProto都描述了张量的元数据:哪些“数据”文件包含张量的内容、该文件的偏移量、校验和、一些辅助数据等

  • 数据文件:它是TensorBundle集合,保存所有变量的值


我正在从tensorflow教程中恢复经过训练的单词嵌入

如果已创建多个检查点:

e、 g.创建的文件如下所示

型号:ckpt-55695.data-00000-of-00001

model.ckpt-55695.index

model.ckpt-55695.meta

试试这个

def restore_session(self, session):
   saver = tf.train.import_meta_graph('./tmp/model.ckpt-55695.meta')
   saver.restore(session, './tmp/model.ckpt-55695')
调用restore_session()时:


例如,如果你训练了一名辍学的CNN,你可以这样做:

# Recreate the EXACT SAME variables
v1 = tf.Variable(..., name="v1")
v2 = tf.Variable(..., name="v2")

...

# Now load the checkpoint variable values
with tf.Session() as sess:
    saver = tf.train.Saver()
    saver.restore(sess, "/tmp/model.ckpt")
def predict(image, model_name):
    """
    image -> single image, (width, height, channels)
    model_name -> model file that was saved without any extensions
    """
    with tf.Session() as sess:
        saver = tf.train.import_meta_graph('./' + model_name + '.meta')
        saver.restore(sess, './' + model_name)
        # Substitute 'logits' with your model
        prediction = tf.argmax(logits, 1)
        # 'x' is what you defined it to be. In my case it is a batch of RGB images, that's why I add the extra dimension
        return prediction.eval(feed_dict={x: image[np.newaxis,:,:,:], keep_prob_dnn: 1.0})

所以不使用.index和.data?当使用这两个文件时,@ajfbiw.s.meta存储图形结构,.data存储图形中每个变量的值,.index标识检查点。在上面的例子中:import\u meta\u图形使用.meta,saver.restore使用.data和.indexOh,我明白了。谢谢。你有没有可能用不同版本的TensorFlow来保存模型,而不是加载它?()有人知道那
00000
00001
数字是什么意思吗?在
variables.data-of-of-of-of-of-of-of-of-of-of-of-of-of-of-of-of-of-of-of-of-of-of-of-of-of-of-of-of-of-of-of-of-of-of-of-of-of-of-of-of-。我可以使用它进行实时视频分类吗?你能告诉我,使用Keras 2,如果模型保存为3个文件,我如何加载它吗?你知道如何解决这个问题吗?如何再次加载模型(使用Keras)?“model.ckpt-55695.data-00000-of-00001”中的“00000-of-00001”是什么意思?