Wenn bei der Erstellung eines Modells in Keras Ausgabeknoten nicht explizit angegeben werden, können Sie sie wie folgt ausdrucken:
[print(n.name) for n in tf.get_default_graph().as_graph_def().node]
Dann müssen Sie nur noch den richtigen finden, der oft dem Namen der Aktivierungsfunktion ähnelt. Sie können diesen String-Namen, den Sie gefunden haben, einfach als Wert für output_node_names
in freeze_graph
function verwenden.
Sie können auch das Tensorflow-Dienstprogramm verwenden: summarize_graph
, um mögliche output_nodes
zu finden. Aus der offiziellen Dokumentation :
Viele der Transformationen, die das Werkzeug unterstützt, müssen wissen, wie die Eingabe- und Ausgabeschichten des Modells sind. Die beste Quelle hierfür ist der Modelltrainingsprozess, bei dem die Eingaben für einen Klassifizierer die Knoten sind, die die Daten aus dem Trainingssatz erhalten, und die Ausgabe die Vorhersagen sind. Wenn Sie sich nicht sicher sind, kann das summarize_graph-Tool das Modell untersuchen und Vermutungen über wahrscheinliche Eingabe- und Ausgabeknoten sowie andere für das Debuggen nützliche Informationen liefern.
Es braucht nur die gespeicherte Grafik pb
file als Eingabe. Sehen Sie in der Dokumentation nach.
Das output_node_names
sollte die Namen der Diagrammknoten enthalten, die Sie für die Schlussfolgerung verwenden möchten (z. B. softmax). Es wird verwendet, um das Sub-Diagramm zu extrahieren, das sein wird benötigt für die Schlussfolgerung.
Es kann nützlich sein, sich freeze_graph_test anzuschauen.
Sie können Keras model.summary () verwenden, um den Namen der letzten Ebene abzurufen.
Wenn model.outputs nicht leer ist, können Sie die Knotennamen über:
erhalten %Vor%Sie erhalten die Sitzung über
%Vor%und Sie konvertieren alle Trainingsvariablen in Constants über
%Vor%Danach können Sie eine Protobuf-Datei über
schreiben %Vor%Tags und Links python tensorflow keras