Training und Vorhersage mit Instanzschlüsseln

9

Ich kann mein Modell trainieren und ML Engine für die Vorhersage verwenden, aber meine Ergebnisse enthalten keine identifizierenden Informationen. Dies funktioniert gut, wenn eine Zeile zur Vorhersage gesendet wird, aber wenn mehrere Zeilen gesendet werden, kann die Vorhersage nicht mit den ursprünglichen Eingabedaten verknüpft werden. Die GCP-Dokumentation erläutert die Verwendung von Instanzschlüsseln, kann jedoch keinen Beispielcode finden Dies trainiert und prognostiziert die Verwendung eines Instanzschlüssels. Nimmt man das GCP-Zensus-Beispiel an, wie würde ich die Eingabefunktionen aktualisieren, um eine eindeutige ID durch das Diagramm zu übertragen und sie während des Trainings zu ignorieren und trotzdem die eindeutige ID mit Vorhersagen zurückzugeben? Oder alternativ, wenn jemand ein anderes Beispiel kennt, das bereits Schlüssel verwendet, die ebenfalls helfen würden.

Von Census Estimator-Beispiel

%Vor%

Aktualisierung: Ich konnte den vorgeschlagenen Code aus dieser Antwort unten verwenden. Ich musste ihn nur geringfügig ändern, um die Ausgabealternativen in der model_fn_ops statt nur der Vorhersage dict. Dies funktioniert jedoch nur, wenn meine Eingabe-Funktion für json-Eingaben ähnlich wie das . Meine Serving-Eingabefunktion wurde zuvor nach der CSV-Serving-Eingabefunktion in der Census-Kernprobe .

Ich denke, mein Problem kommt von build_standardised_signature_def Funktion und noch mehr die is_classification_problem Funktion, die aufgerufen wird. Die Länge der dict-Eingabe mit der CSV-Serving-Funktion ist 1, also wird diese Logik mit dem classification_signature_def , das nur die Punkte anzeigt (was sich herausstellt, sind eigentlich die Wahrscheinlichkeiten ), während die Eingabediktatlänge größer als 1 ist mit der json Serving Eingabefunktion und stattdessen predict_signature_def wird verwendet, die alle Ausgänge enthält.

    
dobbysock1002 06.06.2017, 05:20
quelle

2 Antworten

7

UPDATE: In Version 1.3 wurden die contrib estimators (tf.contrib.learn.DNNClassifier zum Beispiel) geändert, um von der Core-Schätzer-Klasse tf.estimator.Estimator zu erben, die im Gegensatz zu ihrem Vorgänger die Modellfunktion als private Klasse verbirgt Sie müssen estimator.model_fn in der folgenden Lösung durch estimator._model_fn ersetzen.

Josh's Antwort weist Sie auf das Flowers-Beispiel hin, was eine gute Lösung ist, wenn Sie einen benutzerdefinierten Schätzer verwenden möchten. Wenn Sie bei einem gespeicherten Schätzer bleiben möchten (z. B. tf.contrib.learn.DNNClassifiers ), können Sie ihn in einen benutzerdefinierten Schätzer einfügen, der Unterstützung für Schlüssel hinzufügt. (Anmerkung: Ich denke, es ist wahrscheinlich, dass Dosenschätzer wichtige Unterstützung erhalten, wenn sie sich in den Kern bewegen).

%Vor%

my_key_estimator kann dann genauso verwendet werden wie Ihre DNNClassifier , außer dass Sie eine Funktion mit dem Namen 'key' von input_fns (Vorhersage, Auswertung und Training) erwarten.

EDIT2: Sie müssen auch den entsprechenden Eingangstensor zur gewünschten Vorhersagefunktion hinzufügen. Zum Beispiel würde ein neuer JSON-Serving-Input fn wie folgt aussehen:

%Vor%

(leicht abweichend zwischen 1.2 und 1.3, da tf.contrib.learn.InputFnOps durch tf.estimator.export.ServingInputReceiver ersetzt wird und das Auffüllen von Tensoren auf Rang 2 in 1.3 nicht mehr notwendig ist)

Dann sendet ML Engine einen Tensor namens "key" mit Ihrer Vorhersageanforderung, die an Ihr Modell und Ihre Vorhersagen weitergegeben wird.

EDIT3: Modified key_model_fn_gen unterstützt das Ignorieren von fehlenden Schlüsselwerten. EDIT4: Hinzugefügt Schlüssel für die Vorhersage

    
Eli Bixby 08.06.2017, 18:44
quelle
2

Gute Frage. The Cloud ML Motor Blumen Probe tut dies, indem Sie die tf.identity Operation unter Verwendung einer Zeichenfolge übergeben durchgehend von Eingang zu Ausgang. Hier sind die entsprechenden Zeilen während Graph Bau .

%Vor%

Für Batch-Vorhersage müssen Sie „Schlüssel“ einzufügen: „some_key_value“ in Ihre Instanz Aufzeichnungen. Für die Online-Vorhersage würden Sie href="https://cloud.google.com/ml-engine/docs/how-tos/online-predict"> Abfrage die obige Grafik mit einer JSON Anfrage wie

%Vor%     
JoshGC 06.06.2017 15:02
quelle