После небольшого исследования, окончательный ответ на ваш вопрос ДА .Это вполне очевидно, пока вы не поймете, что каталог variables
в saved_model
пуст.
Файл контрольных точек, предоставляемый зоопарком модели обнаружения объектов, содержит следующие файлы:
.
|-- checkpoint
|-- frozen_inference_graph.pb
|-- model.ckpt.data-00000-of-00001
|-- model.ckpt.index
|-- model.ckpt.meta
|-- pipeline.config
`-- saved_model
|-- saved_model.pb
`-- variables
pipeline.config
- это файл конфигурации для сохраненной модели, frozen_inference_graph.pb
- для готового вывода.Обратите внимание, что checkpoint
, model.ckpt.data-00000-of-00001
, model.ckpt.meta
и model.ckpt.index
все соответствуют контрольной точке .( Здесь вы можете найти хорошее объяснение)
Поэтому, когда вы хотите получить обучаемые переменные, единственное, что полезно - это каталог saved_model
.
Используйте SavedModel для сохранения и загрузки вашей модели - переменных, графика и метаданных графика.Это не зависящий от языка, восстанавливаемый, герметичный формат сериализации, который позволяет системам и инструментам более высокого уровня создавать, использовать и преобразовывать модели TensorFlow.
Для восстановления SavedModel
вы можете использовать API tf.saved_model.loader.load()
, и этот API содержит один аргумент tags
, который указывает тип MetaGraphDef
.Поэтому, если вы хотите получить обучаемые переменные, вам нужно указать tag_constants.TRAINING
при вызове API.
Я попытался вызвать этот API для восстановления переменных, но вместо этого он дал мне ошибку, которая говорит
MetaGraphDef, связанный с тегами train, не найден в SavedModel.Для проверки доступных наборов тегов в SavedModel, пожалуйста, используйте CLI SavedModel: saved_model_cli
Итак, я выполнил команду saved_model_cli
для проверки всех тегов, доступных в SavedModel
.
#from directory saved_model
saved_model_cli show --dir . --all
и вывод
MetaGraphDef with tag-set: 'serve' contains the following SignatureDefs:
...
signature_def['serving_default']:
...
Таким образом, в этом SavedModel
нет тега train
, а только serve
.Поэтому SavedModel
здесь используется только для подачи в тензорный поток.Это означает, что когда эти файлы при создании не были указаны с тегом training
, из этих файлов нельзя восстановить тренировочные переменные.
PS: следующий код - это то, что я использовал для восстановления SavedModel
.При настройке tag_constants.TRAINING
загрузка не может быть завершена, но при установке tag_constants.SERVING
загрузка прошла успешно, но переменные пусты.
graph = tf.Graph()
with tf.Session(graph=graph) as sess:
tf.saved_model.loader.load(sess, [tf.saved_model.tag_constants.TRAINING], export_dir)
variables = graph.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES)
print(variables)
PPS: я нашел скрипт для создания SavedModel
здесь .Видно, что действительно не было тега train
при создании SavedModel
.