2017-05-08 3 views
0

ich meine tensorflow versuchen Modell für den Zugriff dient, die eine Signatur aufweist, wie aus diesem Codesegment zu sehen:Wie debuggen „INVALID_ARGUMENT: input Tensor alias nicht in Signatur gefunden“

Es geladen wird
regression_signature = predict_signature_def(
    inputs={"phase_features" : phase_features}, 
    outputs={"phase_weight": phase_weight} 
) 

builder.add_meta_graph_and_variables(
    sess=sess, 
    tags=[tag_constants.SERVING], 
    signature_def_map={'regress_phase_weight': regression_signature}) 
builder.save() 

in tf dient ein Modell config-Datei mit folgendem Inhalt ein:

model_config_list: { 
    config: { 
    name: "PhaseModificationWeightRegressor", 
    base_path: "../../models/phase-mod-weights", 
    model_platform: "tensorflow" 
    } 
} 

Jetzt versuche ich eine Anfrage von Java auf der Grundlage der TensorFlow API und TensorFlow Serving API protos zu erstellen:

... 
tensorflow.serving.Model.ModelSpec.Builder modelSped = ModelSpec.newBuilder() 
       .setName("PhaseModificationWeightRegressor") // name as defined in the tensorflow serving model config file 
       .setSignatureName("regress_phase_weight") // signature name as defined in signature_def_map of add_meta_graph_and_variables of your SavedModelBuilder 
       .setVersion(Int64Value.newBuilder().setValue(1)); // model version as indicated by the version of your model when saving it 

tensorflow.serving.Predict.PredictRequest.Builder requestBuilder = PredictRequest.newBuilder() 
       .setModelSpec(modelSped) 
       .putInputs("phase_features", createTensorProto(phaseFeatures)); 

     return requestBuilder.build(); 

Leider bekomme ich eine Ausnahme:

Exception in thread "main" io.grpc.StatusRuntimeException: INVALID_ARGUMENT: input tensor alias not found in signature: phase_features 

Von dem, was ich verstehe, bedeutet dies den Server erreicht, fand mein Modell „PhaseModificationWeightRegressor“ in der Version 1, die Unterschrift „regress_phase_weight“ genannt GEFUNDEN genannt, konnte aber nicht den logischen Namen (Alias) "phase_features" finden, der zu dem entsprechenden Platzhalter führt. Alles andere könnte das Problem sein? Ich beobachte das jetzt seit 2 Stunden, kann aber das Problem/Tippfehler usw. nicht sehen, was dies nicht funktioniert.

Irgendeine Idee, was könnte falsch sein? Wie kann ich das besser debuggen? Vielleicht sollte TFserving künftig darauf antworten, was es erwartet.

Antwort

0

I gelöst mit:

.putInputs ("Eingänge", createTensorProto (phaseFeatures));

Es scheint, dass der Alias, der vom Client verwendet wird, genau "Eingaben" ist, während der Python-Code gleich bleibt. Mit dieser Änderung funktioniert mein Code.

==== UPDATE ====

I getestet, es auch mit einem Modell mit mehreren (zwei) Eingänge. In diesem Fall sollten Sie den Alias ​​verwenden, den Sie beim Exportieren des Modells verwenden.

+0

Vielen Dank für Ihre Antwort! Ich werde das so schnell wie möglich testen. Dann werde ich deine Antwort annehmen oder vielleicht um mehr Hilfe bitten! – Ben

+0

Das ist genau das Problem. Wenn Sie also nur eine Eingabe verwenden, müssen Sie nur "Eingaben" verwenden und für zwei oder mehr Eingaben müssen Sie die Aliase verwenden? Das klingt komisch für mich, können Sie bestätigen, dass es auf Ihrer Seite stimmt? – Ben

+0

Ja, ich habe es auf diese Weise gemacht. Es klang auch komisch für mich, aber es funktioniert (anscheinend) –

Verwandte Themen