我想使用由未知作者提供的预训练张量流模型。我不知道他/她是如何设法将tensorflow模型(他/她使用tensorflow版本> = 1.2)保存到只有一个扩展名为“ .model ”的文件,因为通常我得到三个文件'.meta','。data','。index'或一个'.ckpt'文件。
如何恢复此预训练模型?如何在以后将模型保存为此格式?
感谢。
答案 0 :(得分:1)
我还在很多平台上提出了这个问题,但还没有任何帮助。所以我决定做一些实验性工作,这就是我发现的。这可能很长,但请耐心等待。
要在Tensor-flow中导入模型,我们使用
with tf.Session() as sess:
new_saver = tf.train.import_meta_graph('my_test_model-1000.meta')
new_saver.restore(sess, tf.train.latest_checkpoint('./'))
.meta
文件包含训练模型的所有变量,操作,集合等。 tf.train.latest_checkpoint('./')
做的是使用检查点文件(只保存最新检查点文件的记录)来导入xxxx_model.data-00000-of-00001
。此.data-00000-of-00001
包含必须加载到my_test_model-1000.meta
中包含的变量中的所有权重,偏差,渐变等。
with tf.Session() as sess:
new_saver = tf.train.import_meta_graph('my_test_model-1000.meta')
#new_saver.restore(sess, tf.train.latest_checkpoint('./'))
tensor_variable = tf.trainable_variables()
for tensor_var in tensor_variable:
#print(sess.run(tensor_var))
print(tensor_var)
此初始代码将打印出.meta
中可训练的所有变量。如果您尝试运行print(sess.run(tensor_var))
,则会收到错误消息。这是因为,变量尚未初始化。但是,如果您取消评论new_saver.restore(sess, tf.train.latest_checkpoint('./'))
并运行print(sess.run(tensor_var))
,您将获得所有变量以及加载到变量中的值。
我最好的猜测是xxxxxx.model
与tensorflow的xxxx_model.data-00000-of-00001
非常相似。它不包含变量,所以如果你尝试
with tf.Session() as sess:
new_saver = tf.train.import_meta_graph('xxx.model')
你会收到一个错误。请记住,原因是,此.model
文件不包含任何形式的任何变量和操作图。如果你也试着做
with tf.Session() as sess:
new_saver = tf.train.Saver()
new_saver.restore(sess, "xxxx.model")
你同样会收到错误。这是因为没有相应的变量来加载值。因此,如果您获得xxx.model
文件,则在尝试运行new_saver.restore(sess, "xxxx.model")
之前,您将不得不经历复制所有变量和操作的痛苦。如果您能够复制架构,那么这将毫无问题地顺利运行。
对不起,这很长,但考虑到互联网上几乎没有答案,我不得不做一个演讲。 :)