提问者:小点点

Tensorflow TOCO python API


我在这里遵循诗人的tenorflow(tflite)教程:https://codelabs.developers.google.com/codelabs/tensorflow-for-poets-2-tflite/#3

我正在尝试将自定义图形从。使用python TOCO API从pb到TF lite:https://github . com/tensor flow/tensor flow/blob/master/tensor flow/contrib/lite/TOCO/g3doc/python _ API . MD

以下代码加载retrained_graph. pb文件,查找输入和输出张量,然后调用toco_convert并写入.tflite文件。

    import tensorflow as tf
     def load_graph(graph_filename):
     with tf.gfile.GFile(graph_filename, "rb") as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())

     with tf.Graph().as_default() as graph:
        tf.import_graph_def(
          graph_def,
          input_map=None,
          return_elements=None,
          name="prefix",
          op_dict=None,
          producer_op_list=None
         )


    graph = load_graph("retrained_graph.pb")
    x = graph.get_tensor_by_name('prefix/input:0') #input tensor
    y = graph.get_tensor_by_name('prefix/final_result:0') #output tensor


    with tf.Session(graph=graph) as sess:
       tflite_model = tf.contrib.lite.toco_convert(sess.graph_def, [x], [y])
       open("test.tflite", "wb").write(tflite_model)

这将生成一个test.tflite文件。为了检查它是否工作,我运行了诗人tf的label_image脚本,它产生了以下错误:

KeyError:“名称'import/input'引用的是图形中没有的操作。”

为了寻找解决方案,我尝试将input_layer = “input” 更改为 input_layer = “Mul”,但这只会产生错误:

KeyError:“名称'import/Mul'指的是不在图表中的操作。”

如果有任何关于我做错了什么的建议,我们将不胜感激。


共2个答案

匿名用户

您是否尝试过使用summarize_graph来检查模型的潜在输入/输出节点名称?

匿名用户

根据您的代码,您的input_layer名称是“prefix/input”而不是“input”。更改为input_layer=“prefix/input”应该可以解决问题。