我有一个tensorflow .pb文件,我想将其加载到python DNN中,还原图形并获得预测。我这样做是为了测试创建的.pb文件是否可以做出与普通Saver.save()模型相似的预测。

我的基本问题是,当我使用上述.pb文件在Android上进行预测时,得到的预测值有很大不同

我的.pb文件创建代码:

frozen_graph = tf.graph_util.convert_variables_to_constants(
        session,
        session.graph_def,
        ['outputLayer/Softmax']
    )
with open('frozen_model.pb', 'wb') as f:
  f.write(frozen_graph.SerializeToString())

因此,我有两个主要问题:
  • 如何将上述.pb文件加载到python Tensorflow模型中?
  • 为什么我在python和android中得到的预测值完全不同?
  • 最佳答案

    以下代码将读取模型并打印出图中节点的名称。

    import tensorflow as tf
    from tensorflow.python.platform import gfile
    GRAPH_PB_PATH = './frozen_model.pb'
    with tf.Session() as sess:
       print("load graph")
       with gfile.FastGFile(GRAPH_PB_PATH,'rb') as f:
           graph_def = tf.GraphDef()
       graph_def.ParseFromString(f.read())
       sess.graph.as_default()
       tf.import_graph_def(graph_def, name='')
       graph_nodes=[n for n in graph_def.node]
       names = []
       for t in graph_nodes:
          names.append(t.name)
       print(names)
    

    您正确地冻结了图形,这就是为什么您得到不同结果的原因,基本上权重没有存储在模型中。您可以使用 Frozen_graph.py (link)获取正确存储的图形。

    关于android - 如何从python中的.pb文件恢复Tensorflow模型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50632258/

    10-10 10:36