Ошибки синтаксического анализа аргумента ml-engine - PullRequest
0 голосов
/ 27 апреля 2018

После успешного развертывания десятков моделей, в которых только самые тривиальные (один аргумент вход / выход) когда-либо успешно возвращали результаты прогнозирования из-за синтаксического анализа и других ошибок аргументов, я вернулся к официальной модели широкого и глубокого анализа: официальный широкий и глубокий учебник и это: подача широкого и глубокого учебного продолжения попытаться экспортировать, развертывать и прогнозировать на ml-engine. Я не могу получить какую-либо перестановку текстовых или json-аргументов для прохождения анализа. Вот некоторые из моих тестов и ответов:

1) содержимое входного файла, текст:

25,0,0,"11th",7,"Male",40,"United-States","Machine-op-inspct","Own-child","Private"

Ответ:

{"error": "Prediction failed: Error during model execution: AbortionError(code=StatusCode.INVALID_ARGUMENT, details=\"Could not parse example input, value: '25,0,0,\"11th\",7,\"Male\",40,\"United-States\",\"Machine-op-inspct\",\"Own-child\",\"Private\"'\n\t [[Node: ParseExample/ParseExample = ParseExample[Ndense=5, Nsparse=6, Tdense=[DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT], dense_shapes=[[1], [1], [1], [1], [1]], sparse_types=[DT_STRING, DT_STRING, DT_STRING, DT_STRING, DT_STRING, DT_STRING], _device=\"/job:localhost/replica:0/task:0/device:CPU:0\"](_arg_input_example_tensor_0_0, ParseExample/ParseExample/names, ParseExample/ParseExample/sparse_keys_0, ParseExample/ParseExample/sparse_keys_1, ParseExample/ParseExample/sparse_keys_2, ParseExample/ParseExample/sparse_keys_3, ParseExample/ParseExample/sparse_keys_4, ParseExample/ParseExample/sparse_keys_5, ParseExample/ParseExample/dense_keys_0, ParseExample/ParseExample/dense_keys_1, ParseExample/ParseExample/dense_keys_2, ParseExample/ParseExample/dense_keys_3, ParseExample/ParseExample/dense_keys_4, ParseExample/Const, ParseExample/Const, ParseExample/Const, ParseExample/Const, Pa...TRUNCATED\")"}

2) содержимое входного файла, json:

{"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"}

Ответ:

{....failed: Expected tensor name: inputs, got tensor name: [u'hours_per_week', u'native_country',....}

3) содержимое входного файла, json:

{"inputs":{"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"}}

Ответ:

{....Error processing input: Expected string, got {u'hours_per_week': 40, u'native_count....}

4) содержимое входного файла, json:

{"inputs":"25,0,0,11th,7,Male,40,United-States,Machine-op-inspct,Own-child,Private"}

Ответ:

{...."Prediction failed: Error during model execution: AbortionError(code=StatusCode.INVALID_ARGUMENT, details=\"Could not parse example input, value: '25,0,0,11th,7,Male,40,United-States,Machine-op-inspct,Own-child,Private'\n\t [[Node: ParseExample/ParseExample = ParseExample[Ndense=5,....}

Я также пытался использовать внутренние экранированные кавычки, различные списки / массивы и т. Д.

Пожалуйста, скажите мне, что мне просто нужно переформатировать мои входные данные в запросе на предсказание (и как) :) -Спасибо

1 Ответ

0 голосов
/ 27 апреля 2018

В текущем положении дел выбор между графиком, который принимает JSON, и графиком, который принимает tf.train.Example, является взаимоисключающим, то есть вы должны экспортировать график немного по-другому.

Из , предлагающего широкое и глубокое продолжение урока , измените эти строки с:

feature_spec = tf.feature_column.make_parse_example_spec(feature_columns)
export_input_fn = tf.estimator.export.build_parsing_serving_input_receiver_fn(feature_spec)

до

inputs = {}
for feat in INPUT_COLUMNS:
  inputs[feat.name] = tf.placeholder(shape=[None], dtype=feat.dtype)
export_input_fn = tf.estimator.export.build_raw_serving_input_receiver_fn(inputs)

Для справки см. этот образец , в частности, определения *_serving_fn в model.py (например, здесь ); этот пример также показывает, как экспортировать график, который ожидает CSV в качестве входных данных.

Еще одно замечание: если вы используете gcloud для отправки запросов (по сравнению с библиотекой запросов), формат входных данных будет , а не полный текст запроса на отправку: gcloud создает запрос с использованием каждой строки в файле. Таким образом, тело фактического запроса, отправленного на сервер, будет выглядеть примерно так:

{
  "instances": [
    {
      "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"
    }
  ]
}

, а соответствующий --json-instances файл будет выглядеть так:

{"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"}

gcloud берет содержимое каждой строки и помещает их в массив, показанный в "фактическом" запросе выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...