Я новичок в тензорном потоке. Я хотел бы понять концептуальную разницу между Graph и GraphDef.
Кроме того, какой должен я должен запустить график, загруженный из файла protobuf (.pb)?
Спасибо!
Я новичок в тензорном потоке. Я хотел бы понять концептуальную разницу между Graph и GraphDef.
Кроме того, какой должен я должен запустить график, загруженный из файла protobuf (.pb)?
Спасибо!
Graph
или Computional Graph
- основная концепция тензорного потока для представления вычислений. Когда вы используете tenorflow, вы сначала создаете свой собственный Computation Graph
и передаете этот Graph
в tenorflow. Как это сделать? Как вы, возможно, знаете, тензор потока поддерживает многие языки программирования переднего плана, такие как Python, C++, Java и Go, а основным языком является C++; как другие языки преобразуют Graph
в C++? Они используют инструмент под названием protobuf
который может генерировать специфические языковые заглушки, откуда GraphDef
. Это сериализованная версия Graph
.
какой из них мне нужно, чтобы запустить график, загруженный из файла protobuf (.pb)
Вы должны прочитать свой *pb
файл, используя GraphDef
и bind
к GraphDef
к ( по умолчанию) Graph
, а затем использовать сеанс для запуска Graph
для вычисления, как следующий код:
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)
GraphDef - это прото-определенный здесь. Это сериализованная версия графика. Вы можете печатать, хранить или восстанавливать GraphDef в любом интерфейсе TensorFlow (Python, R, С++, Java,...). Когда он сохраняется в файле, обычно имя файла заканчивается на .pb
, поэтому вы должны использовать файлы GraphDef для .pb
.
Граф - это абстрактное понятие, которое может быть в разных формах для разных интерфейсов. Для Python tf.Graph() вернет объект Python (code), который содержит GraphDef и многие утилиты.
Для python вы можете загрузить GraphDef, используя tf.import_graph_def. Вот простой пример кода:
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="")
...
Есть ли способ конвертировать GraphDef, инициализированный с помощью ReadBinaryProto() в Graph, который можно использовать с TF_GraphNextOperation()?
Спасибо, Фред