Разница между Tensorflow Graph и GraphDef

Я новичок в тензорном потоке. Я хотел бы понять концептуальную разницу между Graph и GraphDef.

Кроме того, какой должен я должен запустить график, загруженный из файла protobuf (.pb)?

Спасибо!

Ответ 1

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)

Ответ 2

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="")
    ...

Ответ 3

Есть ли способ конвертировать GraphDef, инициализированный с помощью ReadBinaryProto() в Graph, который можно использовать с TF_GraphNextOperation()?

Спасибо, Фред