Должны ли пользователи TensorFlow использовать SavedModel через контрольную точку или GraphDef?

Из SavedModel Docs,

SavedModel, универсальный формат сериализации для моделей TensorFlow.

и

SavedModel обертывает TensorFlow Saver. Saver в основном используется для создания контрольных точек переменной.

Из моего понимания, SavedModel требуется, если кто-то хочет использовать службу TensorFlow. Тем не менее, я могу развернуть модель Tensorflow для обслуживания сервера без SavedModel: заморозить график и экспортировать его как GraphDef и загрузить график в сеанс с помощью ReadBinaryProto и Create в С++ или Import в Go.

Какова цель SavedModel? Должны ли пользователи использовать SavedModel через Checkpoint или GraphDef для объединения большего количества данных, связанных с моделью?

Ответы

Ответ 1

Контрольная точка содержит значение (некоторые из) переменных в модели TensorFlow. Он создается Saver, которому либо присваивается конкретный Variable для сохранения, либо по умолчанию сохраняет все (нелокальные) переменные.

Чтобы использовать контрольную точку, вам необходимо иметь совместимый TensorFlow Graph, чьи Variable имеют те же имена, что и Variable в контрольной точке. (Если у вас нет совместимого Graph, вы можете загрузить значения, сохраненные в контрольной точке, в выбранный Variable, используя init_from_checkpoint Утилиты в Contrib.)

SavedModel является более полным: он содержит набор Graph (MetaGraph s, на самом деле, сохранение коллекций и т.д.), а также контрольную точку, которая должна быть совместима с этими Graph s, и любые файлы активов, которые необходимы для запуска (например, файлы словаря). Для каждого MetaGraph он содержит, он также хранит набор подписей. Подписи определяют (называются) входные и выходные тензоры.

Это означает, что с учетом только SavedModel вы можете писать инструменты (например, tensorflow/serving или новую утилиту командной строки saved_model, которая будет отображаться в tools/ в ближайшее время), которые интерпретируют или выполняют графики внутри. Все, что вам нужно предоставить, это данные.

Если у вас есть сомнения, я всегда буду ошибаться в написании SavedModel, а не только контрольной точки. Это не только позволяет вам использовать функции tensorflow/serve (и другие аккуратные утилиты, которые будут расти в количестве), это гарантирует, что у вас есть вся информация, необходимая для запуска модели. Нет ничего более неприятного, чем контрольная точка, которую вы больше не можете использовать, потому что вы изменили свою модель и теперь она несовместима с файлами контрольных точек, и все, что вы хотите сделать, это запустить некоторые предсказания через нее для сравнения.