Я пытаюсь запустить сервер 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
, но я точно не знаю.
Любая помощь очень ценится.