我正在尝试冻结一个预先训练的模型,然后将其转换为TF Lite,然后将其部署到Android设备中。
通过使用xxd检查生成的.pb文件,我看到它仅包含占位符输出变量。 .pb的大小为几个字节。
为什么所有图形和变量都未包含在模型中?
我使用了以下源自https://github.com/sankit1/cv-tricks.com/tree/master/Tensorflow-tutorials/freeze_model_and_deploy的代码。它可与其他模型配合使用,但不适用于我的模型。
import tensorflow as tf
from tensorflow.python.framework import graph_util
import os,sys
path = './model-gaze/'
output_node_names = "pos"
model_name = 'model-23'
saver = tf.train.import_meta_graph(path+model_name+'.meta', clear_devices=True)
graph = tf.get_default_graph()
input_graph_def = graph.as_graph_def()
sess = tf.Session()
saver.restore(sess, path+model_name)
output_graph_def = graph_util.convert_variables_to_constants(
sess, # The session is used to retrieve the weights
input_graph_def, # The graph_def is used to retrieve the nodes
output_node_names.split(",") # The output node names are used to select the usefull nodes
)
output_graph=path+model_name+".pb"
with tf.gfile.GFile(output_graph, "wb") as f:
f.write(output_graph_def.SerializeToString())
sess.close()
我希望所有的权重和图形数据都包含在.pb内,但无法设法将它们放到那里。
答案 0 :(得分:0)
您跟随的链接是冻结tensorflow模型的正确过程。
冻结模型可以减小模型的大小,因为它仅保存您要存储的““ output_node_names”“。
在整个过程中,请参阅下面的链接。 https://cv-tricks.com/how-to/freeze-tensorflow-models/
在这里,能否请您详细说明“ pos”是什么?
此外,如果您通过预测操作,因为这是进行预测所需的最终操作,那么它应该可以正常工作。
如果这样做没有帮助,请共享您的模型和保存模型的代码,以进一步调试问题。