我是tensorflow的新手。我想了解一下Graph和GraphDef在概念上的区别。
此外,我应该使用哪一个来运行从protobuf文件(.pb)加载的图形?
谢谢!
发布于 2018-01-18 17:38:57
Graph或Computional Graph是tensorflow表示计算的核心概念。当您使用tensorflow时,您首先创建自己的Computation Graph并将Graph传递给tensorflow。如何做到这一点?您可能知道,tensorflow支持许多前端编程语言,如Python、C++、Java和Go,核心语言是C++;其他语言如何将Graph转换为C++?他们使用名为protobuf的工具,该工具可以生成特定的语言存根,这就是GraphDef的来源。它是Graph的序列化版本。
要运行从protobuf文件(.pb)加载的图形,我应该使用哪一个
您应该使用GraphDef读取*pb文件,并将GraphDef bind到(默认) Graph,然后使用会话运行Graph进行计算,就像following code一样
import tensorflow as tf
from tensorflow.python.platform import gfile
with tf.Session() as sess:
model_filename ='PATH_TO_PB.pb'
with gfile.FastGFile(model_filename, 'rb') as f:
graph_def = tf.GraphDef()
graph_def.ParseFromString(f.read())
g_in = tf.import_graph_def(graph_def)
LOGDIR='/logs/tests/1/'
train_writer = tf.summary.FileWriter(LOGDIR)
train_writer.add_graph(sess.graph)发布于 2017-11-02 11:54:49
GraphDef是原型定义的here。这是图的序列化版本。您可以在任何TensorFlow前端(Python、R、C++、Java...)中打印、存储或恢复GraphDef。当将其存储到文件中时,通常文件名以.pb结尾,因此您应该对.pb文件使用GraphDef。
图是一个抽象的概念,对于不同的前端可以有不同的形式。对于Python,tf.Graph()将返回一个Python对象(code),其中包含GraphDef和许多实用程序。
对于python,您可以使用tf.import_graph_def加载GraphDef。下面是一个简单的代码示例:
with tf.gfile.GFile(graph_def_pb_file, "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, name="")
...https://stackoverflow.com/questions/47059848
复制相似问题