Wenn ich mein Modell mit der tensorflow.saved_model.save
Funktion im SavedModel-Format speichere, wie kann ich anschließend abrufen, welche Tensorflow-Operationen in diesem Modell verwendet werden? Da das Modell wiederhergestellt werden kann, werden diese Vorgänge im Diagramm gespeichert. Meine Vermutung liegt in der saved_model.pb
Datei. Wenn ich diesen Protobuf lade (also nicht das gesamte Modell), listet der Bibliotheksteil des Protobuf diese auf, aber dies ist vorerst nicht dokumentiert und als experimentelle Funktion gekennzeichnet. In Tensorflow 1.x erstellte Modelle haben diesen Teil nicht.
Was ist also eine schnelle und zuverlässige Methode, um eine Liste der verwendeten Operationen (Like MatchingFiles
oder WriteFile
) von einem Modell im SavedModel-Format abzurufen?
Im Moment kann ich das Ganze einfrieren, so wie es tensorflowjs-converter
tut. Da sie auch nach unterstützten Operationen suchen. Dies funktioniert derzeit nicht, wenn sich ein LSTM im Modell befindet (siehe hier) . Gibt es einen besseren Weg, dies zu tun, da die Ops definitiv da sind?
Ein Beispielmodell:
class FileReader(tf.Module):
@tf.function(input_signature=[tf.TensorSpec(name='filename', shape=[None], dtype=tf.string)])
def read_disk(self, file_name):
input_scalar = tf.reshape(file_name, [])
output = tf.io.read_file(input_scalar)
return tf.stack([output], name='content')
file_reader = FileReader()
tf.saved_model.save(file_reader, 'file_reader')
Erwartet in der Ausgabe alle Operationen, die in diesem Fall mindestens Folgendes enthalten:
ReadFile
wie hier beschrieben- ...
saved_model
Variable in Ihrem letzten Beispiel? Das Ergebnis tf.saved_model.load('/path/to/model')
oder Laden des Protobufs der Datei saved_model.pb.
saved_model.pb
, ist es einetf.GraphDef
oder eineSavedModel
Protobuf-Nachricht? Wenn Sietf.GraphDef
angerufen habengd
, können Sie die Liste der verwendeten Operationen mit abrufensorted(set(n.op for n in gd.node))
. Wenn Sie ein geladenes Modell haben, können Sie dies tunsorted(set(op.type for op in tf.get_default_graph().get_operations()))
. Wenn es ein istSavedModel
, können Sie dastf.GraphDef
davon bekommen (zBsaved_model.meta_graphs[0].graph_def
).