Получение пакетных прогнозов для TFrecords через CloudML - PullRequest
0 голосов
/ 12 сентября 2018

Я следовал этому замечательному учебнику и успешно обучил модели (на CloudML).Мой код также делает прогнозы в автономном режиме, но теперь я пытаюсь использовать Cloud ML для прогнозов и у меня возникают некоторые проблемы.

Для развертывания моей модели я следовал этому руководству .Теперь у меня есть код, который генерирует TFRecords через apache_beam.io.WriteToTFRecord, и я хочу сделать прогнозы для этих TFRecords.Для этого я следую этой статье , моя команда выглядит так:

gcloud ml-engine jobs submit prediction $JOB_ID --model $MODEL --input-paths gs://"$FILE_INPUT".gz --output-path gs://"$OUTPUT"/predictions --region us-west1 --data-format TF_RECORD_GZIP

Но я получаю только ошибки: 'Exception during running the graph: Expected serialized to be a scalar, got shape: [64]

Кажется, что это ожидаемоданные в другом формате.Я нашел спецификации формата для JSON здесь , но не смог найти, как это сделать с TFrecords.

ОБНОВЛЕНИЕ: здесь вывод saved_model_cli show --all --dir

MetaGraphDef with tag-set: 'serve' contains the following SignatureDefs:

signature_def['prediction']:
  The given SavedModel SignatureDef contains the following input(s):
    inputs['example_proto'] tensor_info:
    dtype: DT_STRING
    shape: unknown_rank
    name: input:0
  The given SavedModel SignatureDef contains the following output(s):
    outputs['probability'] tensor_info:
    dtype: DT_FLOAT
    shape: (1, 1)
    name: probability:0
  Method name is: tensorflow/serving/predict

signature_def['serving_default']:
  The given SavedModel SignatureDef contains the following input(s):
    inputs['example_proto'] tensor_info:
    dtype: DT_STRING
    shape: unknown_rank
    name: input:0
  The given SavedModel SignatureDef contains the following output(s):
    outputs['probability'] tensor_info:
    dtype: DT_FLOAT
    shape: (1, 1)
    name: probability:0
  Method name is: tensorflow/serving/predict

1 Ответ

0 голосов
/ 13 сентября 2018

При экспорте модели необходимо убедиться, что она «пакетная», т. Е. Внешнее измерение входного заполнителя имеет значение shape=[None], например,

input = tf.Placeholder(dtype=tf.string, shape=[None])
...

Это может потребовать немного переработать график. Например, я вижу, что форма вашего вывода жестко закодирована в [1,1]. Внешнее измерение должно быть None, это может произойти автоматически при исправлении заполнителя или может потребовать других изменений.

Учитывая, что имя вывода - probabilities, я бы также ожидал, что самое внутреннее измерение будет> 1, то есть число прогнозируемых классов, что-то вроде [None, NUM_CLASSES].

...