SageMaker Tensorflow - как написать мой serve_input_fn () - PullRequest
0 голосов
/ 27 апреля 2018

Я довольно новичок в Tensorflow и SageMaker, и я пытаюсь понять, как написать мой serving_input_fn(). Я пробовал несколько способов сделать это, но безрезультатно.

моя функция ввода имеет 3 столбца функций: amount_normalized, x_month and y_month:

def construct_feature_columns():
    amount_normalized = tf.feature_column.numeric_column(key='amount_normalized')
    x_month = tf.feature_column.numeric_column(key='x_month')
    y_month = tf.feature_column.numeric_column(key='y_month')
    return set([amount_normalized, x_month, y_month])

Я хочу иметь возможность вызывать мою развернутую модель, используя что-то вроде deployed_model.predict([1.23,0.3,0.8])

Где первый элемент amount_normalized, второй x_month третий y_month

Я пробовал это:

FEATURES = ['amount_normalized', 'x_month', 'y_month']
def serving_input_fn(params):
    feature_placeholders = {
      key : tf.placeholder(tf.float32, [None]) \
        for key in FEATURES
    }
return tf.estimator.export.build_raw_serving_input_receiver_fn(feature_placeholders)()

Но все, что я получаю, это: An error occurred (ModelError) when calling the InvokeEndpoint operation: Received server error (500) from model with message "".

Любая помощь будет действительно оценена!

1 Ответ

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

Публикуйте это здесь, если у кого-то еще есть эта проблема.

После множества проб и ошибок мне удалось решить мою проблему, написав свою функцию ввода обслуживания следующим образом:

FEATURES = ['amount_normalized', 'x_month', 'y_month']
def serving_input_fn(hyperparameters):
    feature_spec = {
        key : tf.FixedLenFeature(shape=[], dtype = tf.float32) \
          for key in FEATURES
    }
    return tf.estimator.export.build_parsing_serving_input_receiver_fn(feature_spec)()

Затем я могу вызвать развернутую модель, передав хеш:

deployed_model.predict({"amount_normalized": 2.3, "x_month": 0.2, "y_month": -0.3})
...