При запросе текстового классификатора tenensflow_model_server API Rest возвращается неверный аргумент - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь запустить сервер tensorflow, к которому можно обратиться с массивом строк, и вернуть ему классификацию каждой из этих строк.

Моя оценка выглядит следующим образом:

def _initialise_estimator():

   feature_columns = _create_feature_columns()

   # Set run configs. Only keep one checkpoint.
   config = tensorflow.estimator.RunConfig(
      keep_checkpoint_max = 1,
   )

   # Create the estimator.
   estimator = tensorflow.estimator.DNNClassifier(
      hidden_units = [500, 100],
      feature_columns = feature_columns,
      n_classes = 98,
      optimizer = tensorflow.train.AdagradOptimizer(learning_rate = 0.003),
      model_dir = _model_location,
      config = config
   )

   return estimator


def _create_feature_columns():
   # Feature column. Assumed to be called description.
   return [tensorflow_hub.text_embedding_column(
      key = 'description',
      module_spec = 'https://tfhub.dev/google/nnlm-en-dim128/1'
   )]

_estimator = _initialise_estimator()

Я могу успешно обучить модель:

data = pandas.read_csv(_pathToData).dropna()
dataset = data[['description', 'class']].copy()

training_input_function = tensorflow.estimator.inputs.pandas_input_fn(
   dataset,
   dataset['class'],
   num_epochs = None,
   shuffle = True
)

_estimator.train(
   input_fn = training_input_function,
   steps = 1000
)

использовать ее для предсказания вещей:

descriptions = pandas.DataFrame(['sales', 'equipment'], columns=['description'])

predict_input_fn = tensorflow.estimator.inputs.pandas_input_fn(
   descriptions,
   shuffle = False
)

_estimator.predict(input_fn = predict_input_fn)

и экспортировать модель, используя export_savedmodel:

feature_columns = _create_feature_columns()
feature_spec = tensorflow.feature_column.make_parse_example_spec(feature_columns)

serving_input_receiver_fn = tensorflow.estimator.export.build_parsing_serving_input_receiver_fn(feature_spec)

_estimator.export_savedmodel(
   export_dir_base = _export_location,
   serving_input_receiver_fn = serving_input_receiver_fn,
   strip_default_attrs = True,
   as_text = True
)

Сервер запускается с использованием следующего:

tensorflow_model_server --rest_api_port=8501 --model_name=prediction --model_base_path=/app/prediction/lib/export

, который успешно запускает сервер.

Однако, когда я пытаюсь запросить сервер с помощью:

curl -d '{"instances": ["sales"]}' -X POST http://localhost:8501/v1/models/prediction:predict

Я получаю следующую ошибку:

{"error": "Не удалось проанализировать пример ввода, значение: \ 'sales \' \ n \ t [[{{node ParseExample/ ParseExample}} = ParseExample [Ndense = 1, Nsparse = 0, Tdense = [DT_STRING], _output_shapes = [[?, 1]], density_shapes = [[1]], sparse_types = [], _device = \ "/ job: localhost / replica: 0 / task: 0 / device: CPU: 0 \ "] (_arg_input_example_tensor_0_0, ParseExample / ParseExample / names, ParseExample / ParseExample / dens_keys_0, ParseExample / ParseExample/ names)]] "}

Что я делаю не так?Кто-нибудь имеет представление о том, в каком формате должен быть массив экземпляров?Я не могу на всю жизнь заставить его работать.Я подозреваю, что это как-то связано с тем, как я сохраняю модель, используя export_savedmodel, но я точно не знаю.

Любая помощь очень ценится.

...