Прогнозирование модели Cloud ML

Я развернул модель, сохраненную тензорным потоком в облачном ML для классификации текста со следующим:

    input_x = graph.get_tensor_by_name('input_x:0')
    keep_prob = graph.get_tensor_by_name('keep_prob:0')
    predictions = graph.get_tensor_by_name('softmax/predictions:0')

feed_dict = {input_x: x_test, batch_size: 8, sequence_length: x_lengths,  keep_prob: 1.0}

Ошибка развернута. У меня есть файл csv для прогнозов. --csv файл -

"the test is completed"
"the test2 is done"

Получение только ошибок. Как преобразовать это в json для модели, которую я обучал, для пакетного прогнозирования в облачном ML ??

save_model_cli - Информация

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

signature_def['serving_default']:
  The given SavedModel SignatureDef contains the following input(s):
    inputs['batch_size'] tensor_info:
        dtype: DT_INT32
        shape: ()
        name: batch_size:0
    inputs['input_x'] tensor_info:
        dtype: DT_INT32
        shape: (-1, 25)
        name: input_x:0
    inputs['keep_prob'] tensor_info:
        dtype: DT_FLOAT
        shape: ()
        name: keep_prob:0
    inputs['sequence_length'] tensor_info:
        dtype: DT_INT32
        shape: (-1)
        name: sequence_length:0
  The given SavedModel SignatureDef contains the following output(s):
    outputs['predictions'] tensor_info:
        dtype: DT_INT64
        shape: (-1)
        name: softmax/predictions:0
  Method name is: tensorflow/serving/predict

В настоящее время я преобразовал csv в Json, используемый для прогнозирования:

{"sequence_length": 25, "batch_size": 1, "keep_prob": 1.0, "input_x": [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 10, 11, 12, 13, 14, 15, 1, 16, 12, 13, 14, 17, 18, 19, 20]}

Исключение:

 Exception during running the graph: Cannot feed value of shape (1,) for Tensor u\'keep_prob:0\', which has shape \'()\' (Error code: 2)\n'

person Giri Annamalai M    schedule 12.08.2018    source источник
comment
Можете ли вы запустить saved_model_cli show --all --dir /path/to/model и предоставить результат?   -  person rhaertel80    schedule 13.08.2018
comment
@ rhaertel80 добавил saved_model_cli, проверьте вопрос об обновлении.   -  person Giri Annamalai M    schedule 14.08.2018


Ответы (1)


Эта модель, по-видимому, нуждается в нескольких изменениях, чтобы ее можно было использовать напрямую. Одно из требований службы состоит в том, чтобы каждый из входов имел неопределенное внешнее измерение, которое интерпретируется как «пакетное» измерение. Входы input_x и sequence_length соответствуют этому требованию, но batch_size и keep_prob нет.

Сервис динамически создает пакеты, поэтому он должен быть переменной длины. Таким образом, иметь вход с именем batch_size будет проблематично, поскольку служба не знает, что он должен устанавливать этот вход. Вместо этого он создает пакет и отправляет его в TensorFlow. TensorFlow уже знает размер пакета, потому что это значение внешнего измерения входных данных, например input_x.

Вместо использования batch_size в качестве входных данных предпочтительно сделать что-то вроде:

batch_size = tf.shape(input_x)[0]

Хотя замечу, что даже в этом на практике обычно бывает довольно редко. Обычно все «просто работает», потому что input_x используется в какой-то операции, такой как матричное умножение или свертка, которые отлично справляются с задачами, не зная явно размер пакета.

Наконец, есть keep_prob, который обычно указывает на то, что в модели есть выпадающий слой. Несмотря на то, что вы можете жестко запрограммировать это на 1.0, обычно рекомендуется просто полностью удалить отсеиваемые слои для обслуживания. По сути, когда вы экспортируете модель, вы фактически строите другой график, чем для обучения. Это проиллюстрировано в person rhaertel80    schedule 14.08.2018