Выйти в зависимости от позиционных индексов и порядка входных значений. Начните полагаться на названные входы и выходы. Как избежать ошибок передачи данных
Именованные входы и выходы - это, по сути, словари со строковыми ключами и значениями тензора.
Преимущества
- Защита от изменения порядка функций
- Самодостаточная модель обслуживания подписей и метаданных
- Защита от переименования и отсутствия функций
Большинство конвейеров машинного обучения считывают данные из структурированного источника (база данных, файлы CSV / Pandas Dataframes, TF Records), выполняют выбор функций, очистку (и, возможно,) предварительную обработку, передавая необработанный многомерный массив (тензор) в модель вместе с другим тензором. представляющий правильный прогноз для каждой входной выборки.
Изменить порядок или переименовать входные функции в рабочей среде? → Бесполезные результаты или перебои на стороне клиента в рабочей среде
Отсутствующие функции? Недостающие данные? Неправильная интерпретация выходного значения? По ошибке перепутали целочисленные индексы? → Бесполезные результаты или производственные перерывы на стороне клиента
Хотите узнать, какие столбцы функций использовались для обучения, чтобы предоставить те же столбцы для вывода? → Вы не можете - Ошибки неверной интерпретации
Хотите знать, какое значение представляют выходные значения? → Не можете - ошибки неверной интерпретации
Не оставляйте имена столбцов на входных слоях модели.
tf.data.Dataset
уже позволяет делать это по умолчанию, рассматривая ввод как словарь.
С годами стало легче справляться с вышеуказанными проблемами. Вот небольшой обзор доступных решений с экосистемой Tensorflow 2.x
.
- TFRecords and tf.Example - это лучший формат данных для использования в любых масштабных проектах глубокого обучения. Каждой функции присвоено имя по умолчанию.
- Tensorflow Transform использует именованные входные данные и производит именованные выходные данные, побуждая вас сделать то же самое для вашей модели.
- Keras поддерживает словари слоев в качестве входов * и * выходов
- Определения TensorSpec и Обслуживающая подпись по умолчанию поддерживают именованные операции ввода-вывода.
Используя это определение подписи serving_raw
, вы можете вызвать конечную точку обслуживания Tensorflow напрямую с помощью полезной нагрузки JSON без сериализации в tf.Example
.
Посмотрите подпись metadata
на обслуживании TF с образцом режима прогнозирования биткойнов, над которым я сейчас работаю:
Наконец, если вы используете TFX или получили схему буфера протокола для входных данных, вы должны использовать ее для отправки данных для вывода, так как это намного больше эффективный, и ошибки быстрее появляются на стороне клиента, а не на стороне сервера. Даже в этом случае продолжайте использовать именованные входы и выходы для своей модели.
Спасибо, что дочитали до конца!
Хотите также узнать, как правильно структурировать свой следующий проект машинного обучения?
- Прочтите мою статью Структурирование проектов конвейеров машинного обучения.