2017-02-14 5 views
14

Von SavedModel Docs,Sollten TensorFlow-Benutzer SavedModel gegenüber Checkpoint oder GraphDef bevorzugen?

SavedModel, das universelle Serialisierungsformat für TensorFlow Modelle.

und

SavedModel wickelt eine TensorFlow Saver. Der Saver wird hauptsächlich zum Generieren der variablen Kontrollpunkte verwendet.

Von meinem Verständnis, SavedModel ist Muss, wenn jemand TensorFlow Serving verwenden möchte. Allerdings kann ich Tensorflow Model Service-Server ohne SavedModel bereitstellen: Freeze-Diagramm und exportieren Sie es als GraphDef, und laden Sie Grafik in Sitzung mit ReadBinaryProto und Create in C++ oder Import in Go.

Was ist der Zweck von SavedModel? Sollten Benutzer SavedModel gegenüber Checkpoint oder GraphDef bevorzugen, um mehr Daten im Zusammenhang mit dem Modell zu sammeln?

+0

Die meisten Leute verwenden Checkpoints, denke ich, und "tf.saved_model" ist eine neue Funktion, die wir eingeführt haben. Es sollte schöner sein zu verwenden. Es gibt ein ddoc [hier] (https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/saved_model/README.md). – drpng

+1

@drpng Ich würde gerne wissen, was die "besten Praktiken" für den Umgang mit Modell speichern. –

Antwort

18

Ein Prüfpunkt enthält den Wert von (einigen der) Variablen in einem TensorFlow-Modell. Es wird von einer Saver erstellt, die entweder bestimmte Variable s zu speichern gibt, oder standardmäßig alle (nicht lokale) Variablen speichert.

Um einen Prüfpunkt zu verwenden, benötigen Sie einen kompatiblen TensorFlow Graph, dessen Variable s die gleichen Namen wie die Variable s im Prüfpunkt haben. (Wenn Sie nicht über ein kompatibles Graph haben, können Sie immer noch die Werte in einem Checkpoint in ausgewählte Variable s gespeichert laden die init_from_checkpoint Dienstprogramme in contrib verwenden.)

SavedModel ist viel umfassender: Es enthält eine Reihe von Graph s (MetaGraph s, in der Tat speichern Sammlungen und so), sowie einen Checkpoint, der mit diesen Graph s kompatibel sein soll, und alle Asset-Dateien, die benötigt werden, um das Modell (z. B. Vokabeln) laufen zu lassen. Für jede MetaGraph enthält es auch eine Reihe von Signaturen. Signaturen definieren (benannte) Eingabe- und Ausgabetensoren.

Das bedeutet, dass nur ein SavedModel gegeben, können Sie Tools (wie tensorflow/serving, oder das neue saved_model Befehlszeilenprogramm, das in tools/ kurz angezeigt) schreiben, die die Graphen innerhalb interpretieren oder auszuführen. Alles, was Sie angeben müssen, sind die Daten.

Im Zweifelsfall würde ich immer auf die Seite schreiben SavedModel, nicht nur ein Prüfpunkt. Dies ermöglicht nicht nur die Verwendung von Tensorflow/Serving (und anderer sauberer Dienstprogramme, die an Zahl zunehmen werden), sondern stellt auch sicher, dass Sie alle notwendigen Informationen zum Ausführen des Modells haben. Nichts ist frustrierender als ein Prüfpunkt, den Sie nicht mehr verwenden können, weil Sie Ihr Modell geändert haben und jetzt mit Prüfpunktdateien nicht kompatibel ist und Sie lediglich einige Vorhersagen zum Vergleich ausführen möchten.

+1

Kann ich hier einsteigen und Sie bitten, Ihre Antwort mit einigen Informationen zur Verwendung von 'SavedModel' für das Training zu aktualisieren?Checkpoints sind großartig, da sie Ihnen ermöglichen, mehrere Modellversionen zu behalten. Und weil sie das Training abbrechen lassen. 'SavedModel' scheint nur einmal einen Kontrollpunkt zu speichern (beim Aufruf von' add_meta_graph_and_variables') und nie wieder. Gibt es eine Möglichkeit, Checkpoints regelmäßig zu schreiben? –

+2

Normalerweise schreiben wir regelmäßig Checkpoints und wickeln dann einen (normalerweise den besten) Checkpoint in ein SavedModel. Sie können jeden Checkpoint auch einfach zu einem SavedModel machen, es gibt keinen Grund, nur einen zu machen. – wicke

+0

SavedModel scheint viel länger zu laden, siehe https://StackOverflow.com/questions/44238347/loading-savedmodel-is-a-lot-slower-than-loading-a-tf-train-saver- checkpoint – bw4sz

Verwandte Themen