В Tensorflow для обслуживания модели, что именно должна делать функция ввода обслуживания

Итак, я изо всех сил пытался понять, каковы основные задачи serve_input_fn(), когда обученная модель экспортируется в Tensorflow для служебных целей. В Интернете есть несколько примеров, которые объясняют это, но у меня проблемы с определением для себя.

Проблема, которую я пытаюсь решить, - это проблема регрессии, где у меня 29 входов и один выход. Для этого есть шаблон для создания соответствующей функции входного обслуживания? Что, если я использую проблему классификации с одним классом? Должна ли быть изменена моя входная функция подачи или я могу использовать ту же функцию?

И, наконец, мне всегда нужно обслуживать функции ввода или это только когда я использую tf.estimator для экспорта моей модели?

2 ответа

Решение

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

Если у вас есть 29 входов, ваша функция входного обслуживания может выглядеть следующим образом:

def serving_input_fn():
    feature_placeholders = {
      'var1' : tf.placeholder(tf.float32, [None]),
      'var2' : tf.placeholder(tf.float32, [None]),
      ...
    }
    features = {
        key: tf.expand_dims(tensor, -1)
        for key, tensor in feature_placeholders.items()
    }
    return tf.estimator.export.ServingInputReceiver(features, 
                                                    feature_placeholders)

Обычно это выглядит как JSON:

{"instances": [{"var1": [23, 34], "var2": [...], ...}]}

PS Вывод не является частью функции входного обслуживания, потому что речь идет о входе для прогнозирования. Если вы используете предварительно сделанный оценщик, выход уже предопределен. Если вы пишете собственный оценщик, вы бы написали экспортную подпись.

Если вы пишете пользовательский оценщик, функция ввода обслуживания остается такой же, как указано выше. Это все еще вход для предиката ().

Что изменится, так это то, что вы должны написать словарь прогнозов для выходных данных и указать его при создании EstimatorSpec

Взгляните на обслуживающую функцию ввода в model.py и sequence_regressor в task.py в этом каталоге:

https://github.com/GoogleCloudPlatform/training-data-analyst/tree/master/courses/machine_learning/deepdive/09_sequence/sinemodel/trainer

Это пример пользовательской модели регрессии, которая принимает N входов и имеет один выход.

Другие вопросы по тегам