Я реализую конвейер TFX, аналогичный примеру чикагского такси.
Прогноз модели с возвратом возвращает {"predictions": []}
.
Как мне отладить эту проблему?
Я вижу записи сделанных прогнозов. Но поскольку он возвращает пустой массив, код состояния равен 200, и нет никакой полезной информации о том, что пошло не так. Я ожидаю, что данные запроса прогноза не будут правильно переданы оценщику.
Пример Чикаго использует это в качестве приемника, и это работает. Я предполагаю, что это также должно работать для моего примера
def _example_serving_receiver_fn(transform_output, schema):
"""Build the serving in inputs.
Args:
transform_output: directory in which the tf-transform model was written
during the preprocessing step.
schema: the schema of the input data.
Returns:
Tensorflow graph which parses examples, applying tf-transform to them.
"""
raw_feature_spec = _get_raw_feature_spec(schema)
raw_feature_spec.pop(_LABEL_KEY)
raw_input_fn = tf.estimator.export.build_parsing_serving_input_receiver_fn(
raw_feature_spec, default_batch_size=None)
serving_input_receiver = raw_input_fn()
transformed_features = transform_output.transform_raw_features(
serving_input_receiver.features)
return tf.estimator.export.ServingInputReceiver(
transformed_features, serving_input_receiver.receiver_tensors)
Основное отличие состоит в том, что я ожидаю только 1 ввод: строку языков программирования, разделенных '|': 'java|python'
.
Затем я разделяю эту строку в своей функции предварительной обработки и превращаю ее в массив с одним горячим кодированием формы 500 (у меня есть ровно 500 вариантов)
Может также случиться, что предсказание не будет правильно преобразовано с помощью tf transform. (преобразование tf является частью конвейера tfx и работает правильно)
запрос: {"instances": ["javascript|python"]}
ответ: {"predictions": []}
ожидаемый ответ: {"predictions": [520]}
(это модель регрессии)