2017-05-15 2 views
2

J'ai développé un modèle pour le service de prédiction en ligne du moteur cloud ML. Mon modèle contient un tenseur placeholder_with_default que j'utilise pour maintenir un seuil de signification de prédiction.Les tenseurs d'espace réservé nécessitent une valeur dans ml-engine predict mais pas local predict

threshold = tf.placeholder_with_default(0.01, shape=(), name="threshold") 

J'ai remarqué que lors de l'utilisation locale de prédire:

gcloud ml-engine local predict --json-instances=data.json --model-dir=/my/model/dir 

Je ne ai pas besoin de fournir des valeurs pour ce tenseur. par exemple. ceci est une entrée valide:

{"features": ["a", "b"], "values": [10, 5]} 

Cependant lors de l'utilisation de prédire en ligne:

gcloud ml-engine predict --model my_model --version v1 --json-instances data.json 

Si je JSON ci-dessus, je reçois une erreur:

{ 
    "error": "Prediction failed: Exception during model execution: AbortionError(code=StatusCode.INVALID_ARGUMENT, details=\"input size does not match signature\")" 
} 

Toutefois, si j'inclus seuil, alors je ne le fais pas. par exemple:

{"features": ["a", "b"], "values": [10, 5], "threshold": 0.01} 

Existe-t-il un moyen d'avoir "seuil" comme entrée optionnelle?

Merci

Matthew

Répondre

0

On dirait actuellement il est impossible dans CloudML. Si vous obtenez des prédictions d'un fichier JSON, vous devez ajouter explicitement les valeurs par défaut (comme vous l'avez fait avec "threshold": 0.01).

En Python, je suis simplement ajouter dynamiquement les attributs requis avant de faire la demande de l'API:

def add_empty_fields(instance): 
    placeholder_defaults = {"str_placeholder": "", "float_placeholder": -1.0} 
    for ph, default_val in placeholder_defaults.items(): 
     if ph not in instance: 
      instance[ph] = default_val 

qui muter le instance dict qui associe les noms d'espace réservé à l'espace réservé valeurs. Pour un modèle avec de nombreux espaces réservés facultatifs, cela est un peu plus agréable que de définir manuellement des valeurs d'espace réservé manquantes pour chaque instance.