2017-09-12 1 views
0

Nachdem ich das SavedModel "Wide and Deep" -Tutorial unter https://github.com/MtDersvan/tf_playground/blob/master/wide_and_deep_tutorial/wide_and_deep_basic_serving.md verfolgt habe, kann ich das SavedModel nicht mit dem Saved_Model_cli abfragen, das mit Tensorflow geliefert wird.Wie kann man das Tensorflow 'Wide and Deep' Modell mit dem saved_model_cli abfragen?

Hier ist ein Beispiel für etwas, das ich schon versucht habe:

saved_model_cli run --dir /tmp/serving_savemodel/1504908631 --tag_set serve --signature_def serving_default --input_exprs 'age=25;capital_gain=0;capital_loss=0;education=11th;education_num=7;gender=Male;hours_per_week=40;native_country=United-States;occupation=Machine-op-inspct;relationship=Own-child;workclass=Private' 

Antwort

1

Zwei Fragen:

  1. --input-exprs müssen gültige Python-Ausdrücke sein; Ihnen fehlen Zitate um Ihre Strings.
  2. --input-excrs erwartet einen Wert pro Eingabe für das Modell; Dieses Modell hat eine einzige Eingabe: eine Zeichenfolge, von der erwartet wird, dass sie ein serialisiertes tf.train.Example Objekt ist (Sie können dies mit saved_model_cli show überprüfen).

ehrlich zu sein, ein tf.train.Example auf der Kommandozeile zu bauen versucht, belastende ist, und Sie können besser dran schreiben ein Python-Skript sein, sie zu bauen und speichern sie in einer Datei (dann können Sie Verwenden Sie stattdessen die Option --input). Und in der Tat wird die = sowieso saved_model_cli verwirren.

Hier Python-Code Beispiel zu bauen und eine tf.train.Example in einer einzigen Zeile (es ein einzelnes int Merkmal x mit dem Wert 10) serialisiert:

`tf.train.Example(features=tf.train.Features(feature={"x": tf.train.Feature(int64_list=tf.train.Int64List(value=[10]))})).SerializeToString()` 
0

MtDersvan answered die Frage von seinem Github repo, die erfolgreich war me (Zitate wegen Formatierungsfehler zu vermeiden):

Da die Eingabe eine serialisierte tf.Example ist dann müssen Sie ein feature_dict in eine serialisierte proto-Tensor, so etwas konvertieren:

import tensorflow as tf 

def _float_feature(value): 
    return tf.train.Feature(float_list=tf.train.FloatList(value=[value])) 

def _bytes_feature(value): 
    return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value])) 

feature_dict = {'age': _float_feature(value=25), 
       'capital_gain': _float_feature(value=0), 
       'capital_loss': _float_feature(value=0), 
       'education': _bytes_feature(value='11th'.encode()), 
       'education_num': _float_feature(value=7), 
       'gender': _bytes_feature(value='Male'.encode()), 
       'hours_per_week': _float_feature(value=40), 
       'native_country': _bytes_feature(value='United-States'.encode()), 
       'occupation': _bytes_feature(value='Machine-op-inspct'.encode()), 
       'relationship': _bytes_feature(value='Own-child'.encode()), 
       'workclass': _bytes_feature(value='Private'.encode())} 

example = tf.train.Example(features=tf.train.Features(feature=feature_dict)) 

serialized = example.SerializeToString() 

serialized_proto = tf.contrib.util.make_tensor_proto(serialized, shape=[1]) 

serialized_proto_handle = serialized_proto.string_val 

Diese serialized_proto_handle soll wie folgt aussehen:

[b'\n\xaa\x02\n\x1a\n\x0ehours_per_week\x12\x08\x12\x06\n\x04\x00\x00 B\n\x1d\n\x0crelationship\x12\r\n\x0b\n\tOwn-child\n\x19\n\reducation_num\x12\x08\x12\x06\n\x04\x00\x00\[email protected]\n#\n\noccupation\x12\x15\n\x13\n\x11Machine-op-inspct\n\x18\n\x0ccapital_gain\x12\x08\x12\x06\n\x04\x00\x00\x00\x00\n\x18\n\x0ccapital_loss\x12\x08\x12\x06\n\x04\x00\x00\x00\x00\n\x15\n\teducation\x12\x08\n\x06\n\x0411th\n\x0f\n\x03age\x12\x08\x12\x06\n\x04\x00\x00\xc8A\n#\n\x0enative_country\x12\x11\n\x0f\n\rUnited-States\n\x18\n\tworkclass\x12\x0b\n\t\n\x07Private\n\x12\n\x06gender\x12\x08\n\x06\n\x04Male'] 

So kann diese separat durchgeführt werden, zum Beispiel in einem ipython oder einem Python-Skript. Als nächstes können Sie es entweder in eine Datei (pickle, .npy, .npz) ablegen oder es direkt von einer Konsole aus aufnehmen:

saved_model_cli run --dir ./wide_and_deep_tutorial/serving_savemodel/${MODEL_DIR} \ 
--tag_set serve --signature_def serving_default \ 
--input_exprs "inputs=[b'\n\xaa\x02\n\x1a\n\x0ehours_per_week\x12\x08\x12\x06\n\x04\x00\x00 B\n\x1d\n\x0crelationship\x12\r\n\x0b\n\tOwn-child\n\x19\n\reducation_num\x12\x08\x12\x06\n\x04\x00\x00\[email protected]\n#\n\noccupation\x12\x15\n\x13\n\x11Machine-op-inspct\n\x18\n\x0ccapital_gain\x12\x08\x12\x06\n\x04\x00\x00\x00\x00\n\x18\n\x0ccapital_loss\x12\x08\x12\x06\n\x04\x00\x00\x00\x00\n\x15\n\teducation\x12\x08\n\x06\n\x0411th\n\x0f\n\x03age\x12\x08\x12\x06\n\x04\x00\x00\xc8A\n#\n\x0enative_country\x12\x11\n\x0f\n\rUnited-States\n\x18\n\tworkclass\x12\x0b\n\t\n\x07Private\n\x12\n\x06gender\x12\x08\n\x06\n\x04Male']" 

Result for output key classes: 
[[b'0' b'1']] 
Result for output key scores: 
[[ 0.85787761 0.14212234]] 
Verwandte Themen