2016-04-06 5 views
2

Ich benutze Tensorflow + Python.TensorFlow: Wie kann ich ein Modell ohne Quellcode veröffentlichen?

Ich bin gespannt, ob ich ein gespeichertes Tensorflow-Modell (Architektur + trainierte Variablen) ohne detaillierten Quellcode freigeben kann. Ich bin mir bewusst, tf.train.Saver(), aber es sieht aus, nur Variablen zu speichern, und um sie wiederherzustellen/ausführen, muss ein Benutzer die gleiche Architektur "definieren".

Nur zum Testen/Ausführen, gibt es eine Möglichkeit, eine gespeicherte {Architektur + trainierte Variablen} ohne Quellcode freizugeben, so dass ein Benutzer nur eine Abfrage generieren und ein Ergebnis erhalten kann?

Antwort

1

Das Projekt TensorFlow Serving soll diesen Anwendungsfall vereinfachen (unter der Annahme, dass der Endbenutzer das Modell nur für Rückschlüsse und nicht für Schulungen verwendet). TensorFlow Serving umfasst eine Exporter Klasse, die Ihre tf.train.Saver, die tf.GraphDef, die Ihr Gesamtmodell definiert, und eine "Signatur", die die Eingaben und Ausgaben von Ihrem Modell beschreibt.

Die basics tutorial hat eine gute Einführung in das Exportieren Ihres Modells.

1

Sie können eine Saver aus MetaGraphDef erstellen (standardmäßig mit Prüfpunkten gespeichert: diese .meta-Dateien). und verwenden Sie dann diesen Saver, um Ihr Modell wiederherzustellen. Daher müssen Benutzer Ihr Diagramm nicht in ihrem Code neu definieren. Aber dann müssen sie immer noch die Modellsignatur herausfinden (Eingabe, Ausgabevariablen). Ich löse das mit tf.Collection (aber ich bin daran interessiert, bessere Möglichkeiten zu finden, es auch zu tun).

Sie einen Blick auf meine Beispielimplementierung nehmen (die eval.py bewerten ein Modell ohne neu zu definieren ein Modell):

+0

Mit Ihrer Implementierung erhalten Sie die richtigen Gewichte fr om das trainierte Modell? Ich kann nur sehen, dass Sie die Eingabe- und Ausgabeschichten erhalten (https://github.com/falcondai/cifar10/blob/master/eval.py#L43 + https://github.com/falcondai/cifar10/blob/master /eval.py#L45) –

+0

@NicolaiAntonLynnerup Ja, der Saver übernimmt das Laden der Binärdatei aus der Prüfpunktdatei für jede Variable. Die Zeilen, auf die Sie Bezug genommen haben, rufen die erforderlichen Eingabe- und Ausgabevariablen ab (und nicht die Ebenen), sodass wir den Graphen in der Auswertung ausführen können: Stellen Sie sich diese als Funktionssignatur vor, ein visueller Klassifikator mappt Bild -> Klassenlogits. Um es anders auszudrücken, ohne diese Variablen (Platzhalter sind auch Variablen) können wir diesen Aufruf nicht aufbauen: https://github.com/falcondai/cifar10/blob/master/eval.py#L67 – Falcon

+0

Und es funktioniert perfekt:) Vielen Dank! –

Verwandte Themen