Tensorflow冻结模型仅包含输出占位符变量

时间:2019-08-30 06:37:03

标签: python tensorflow

我正在尝试冻结一个预先训练的模型,然后将其转换为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内,但无法设法将它们放到那里。

1 个答案:

答案 0 :(得分:0)

您跟随的链接是冻结tensorflow模型的正确过程。

冻结模型可以减小模型的大小,因为它仅保存您要存储的““ output_node_names”“。

在整个过程中,请参阅下面的链接。 https://cv-tricks.com/how-to/freeze-tensorflow-models/

在这里,能否请您详细说明“ pos”是什么?

此外,如果您通过预测操作,因为这是进行预测所需的最终操作,那么它应该可以正常工作。

如果这样做没有帮助,请共享您的模型和保存模型的代码,以进一步调试问题。