Frage Unterschied zwischen Tensorflow Graph und GraphDef


Ich bin ziemlich neu im Tensorflow. Ich würde gerne den konzeptionellen Unterschied zwischen Graph und GraphDef verstehen.

Außerdem, welchen sollte ich ein Diagramm aus der Datei protobuf (.pb) geladen haben?

Vielen Dank!


6
2017-11-01 16:53


Ursprung


Antworten:


Graph oder Computional Graph ist das Kernkonzept von Tensorflw zur Darstellung von Computionen. Wenn Sie Tensorflow verwenden, erstellen Sie zuerst Ihre eigenen Computation Graph und passiere die Graph zu Tensorfluss. Wie geht das? Wie Sie vielleicht wissen, unterstützt Tensorflow viele Front-Programmiersprachen, wie Python, C ++, Java und Go und die Kernsprache ist C ++, wie die anderen Sprachen die Graph nach C ++? Sie benutzen ein Werkzeug namens protobuf das kann bestimmte Sprache Stubs generieren, das ist, wo GraphDef komme aus. Es ist eine serialisierte Version von Graph.

Welches sollte ich ein Diagramm von probobuf Datei geladen (. Pb)

Du solltest dich lesen *pb Datei mit GraphDef und bind das GraphDef zu einem (Standard) Graph, verwenden Sie dann eine Sitzung, um das Programm auszuführen Graph für die Berechnung, wie die folgender 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)

14
2018-01-18 09:38



GraphDef ist der Prototyp definiert Hier. Dies ist die serialisierte Version des Graphen. Sie können GraphDef in jedem TensorFlow-Frontend drucken, speichern oder wiederherstellen (Python, R, C ++, Java, ...). Wenn es in einer Datei gespeichert wird, endet der Dateiname normalerweise mit .pb, also sollten Sie GraphDef für verwenden .pb Dateien.

Graph ist ein abstraktes Konzept, das für unterschiedliche Frontends in verschiedenen Formen vorliegen kann. Für Python würde tf.Graph () ein Python-Objekt (Code), die den GraphDef und viele Dienstprogramme enthält.

Für Python können Sie ein GraphDef mit laden tf.import_graph_def. Hier ist ein einfaches Codebeispiel:

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

1
2017-11-02 03:54