tf.compat.v1.train.Saver
Сохраняет и восстанавливает переменные.
tf.compat.v1.train.Saver(
var_list=None,
reshape=False,
sharded=False,
max_to_keep=5,
keep_checkpoint_every_n_hours=10000.0,
name=None,
restore_sequentially=False,
saver_def=None,
builder=None,
defer_build=False,
allow_empty=False,
write_version=saver_pb2.SaverDef.V2,
pad_step_number=False,
save_relative_paths=False,
filename=None
)
Переход на TF2
tf.compat.v1.train.Saver не поддерживается для сохранения и восстановления контрольных точек в TF2. Пожалуйста, переключитесь на tf.train.Checkpoint или tf.keras.Model.save_weights, которые выполняют более надежное объектно-ориентированное сохранение.
Как переписать контрольные точки
Пожалуйста, немедленно перепишите свои контрольные точки, используя объектно-ориентированные API контрольных точек.
Вы можете загрузить контрольную точку на основе имени, созданную tf.compat.v1.train.Saver, с помощью tf.train.Checkpoint.restore или tf.keras.Model.load_weights. Однако, вам может потребоваться изменить имена переменных в вашей модели, чтобы соответствовать именам переменных в контрольной точке на основе имени, которые можно просмотреть с помощью tf.train.list_variables(path).
Другой вариант — создать assignment_map, который сопоставляет имя переменных в контрольной точке на основе имени с переменными в вашей модели, например:
{
'sequential/dense/bias': model.variables[0],
'sequential/dense/kernel': model.variables[1]
}
и использовать tf.compat.v1.train.init_from_checkpoint(path, assignment_map) для восстановления контрольной точки на основе имени.
После восстановления перекодируйте вашу контрольную точку, используя tf.train.Checkpoint.save или tf.keras.Model.save_weights.
См. раздел Совместимость контрольных точек в руководстве по миграции для получения более подробной информации.
Управление контрольными точками в TF2
Используйте tf.train.CheckpointManager для управления контрольными точками в TF2. tf.train.CheckpointManager предлагает эквивалентные keep_checkpoint_every_n_hours и max_to_keep параметры.
Для восстановления последней контрольной точки,
checkpoint = tf.train.Checkpoint(model) manager = tf.train.CheckpointManager(checkpoint) status = checkpoint.restore(manager.latest_checkpoint)
tf.train.CheckpointManager также записывает CheckpointState протокол, который содержит отметку времени создания каждой контрольной точки.
Запись MetaGraphDef в TF2
Чтобы заменить tf.compat.v1.train.Saver.save(write_meta_graph=True), используйте tf.saved_model.save для записи MetaGraphDef (который содержится в saved_model.pb).
Описание
Используется в блокнотах
| Используется в руководстве |
|---|
См. Переменные для обзора переменных, сохранения и восстановления.
Класс Saver добавляет операции для сохранения и восстановления переменных в и из контрольных точек. Он также предоставляет удобные методы для выполнения этих операций.
Контрольные точки — это двоичные файлы в собственном формате, которые сопоставляют имена переменных со значениями тензоров. Лучший способ проверить содержимое контрольной точки — загрузить ее с помощью Saver.
Сохранители могут автоматически нумеровать имена файлов контрольных точек с заданным счетчиком. Это позволяет хранить несколько контрольных точек на разных шагах во время обучения модели. Например, вы можете пронумеровать имена файлов контрольных точек номером шага обучения. Чтобы избежать заполнения дисков, сохранители автоматически управляют файлами контрольных точек. Например, они могут сохранять только N последних файлов или одну контрольную точку каждые N часов обучения.
Вы нумеруете имена файлов контрольных точек, передавая значение в необязательный аргумент global_step методу save():
saver.save(sess, 'my-model', global_step=0) ==> filename: 'my-model-0' ... saver.save(sess, 'my-model', global_step=1000) ==> filename: 'my-model-1000'
Кроме того, необязательные аргументы конструктора Saver() позволяют вам контролировать распространение файлов контрольных точек на диске:
max_to_keepуказывает максимальное количество последних файлов контрольных точек для сохранения. По мере создания новых файлов старые файлы удаляются. Если None или 0, файлы контрольных точек не удаляются с файловой системы, но сохраняется только последний в файлеcheckpoint. По умолчанию равно 5 (то есть сохраняются 5 последних файлов контрольных точек.)keep_checkpoint_every_n_hours: В дополнение к сохранению последнихmax_to_keepфайлов контрольных точек, вы можете сохранить один файл контрольной точки каждые N часов обучения. Это может быть полезно, если вы хотите позже проанализировать, как модель развивалась во время длительной сессии обучения. Например, передачаkeep_checkpoint_every_n_hours=2гарантирует, что вы сохраняете один файл контрольной точки каждые 2 часа обучения. Значение по умолчанию 10 000 часов фактически отключает эту функцию.
Обратите внимание, что вам по-прежнему необходимо вызвать метод save() для сохранения модели. Передача этих аргументов в конструктор не приведет к автоматическому сохранению переменных.
Программа обучения, которая регулярно сохраняет, выглядит так:
...
# Create a saver.
saver = tf.compat.v1.train.Saver(...variables...)
# Launch the graph and train, saving the model every 1,000 steps.
sess = tf.compat.v1.Session()
for step in range(1000000):
sess.run(..training_op..)
if step % 1000 == 0:
# Append the step number to the checkpoint name:
saver.save(sess, 'my-model', global_step=step)
В дополнение к файлам контрольных точек, сохранители хранят протокол буфера на диске со списком последних контрольных точек. Это используется для управления пронумерованными файлами контрольных точек и latest_checkpoint(), что облегчает поиск пути к последней контрольной точке. Этот протокол буфера хранится в файле с именем 'checkpoint' рядом с файлами контрольных точек.
Если вы создаете несколько сохранителей, вы можете указать другое имя файла для файла протокола буфера в вызове save().
| Args | |
|---|---|
var_list | Список Variable/SaveableObject или словарь, сопоставляющий имена с SaveableObject. Если None, по умолчанию используется список всех сохраняемых объектов. |
reshape | Если True, позволяет восстановить параметры из контрольной точки, где у переменных другой размер. |
sharded | Если True, фрагментировать контрольные точки, по одной на устройство. |
max_to_keep | Максимальное количество последних контрольных точек для сохранения. По умолчанию равно 5. |
keep_checkpoint_every_n_hours | Как часто сохранять контрольные точки. По умолчанию равно 10 000 часам. |
name | Строка. Необязательное имя для использования в качестве префикса при добавлении операций. |
restore_sequentially | Логическая переменная, которая, если имеет значение true, заставляет происходить восстановление разных переменных поочередно внутри каждого устройства. Это может снизить использование памяти при восстановлении очень больших моделей. |
saver_def | Необязательный SaverDef протокол для использования вместо запуска билдера. Это полезно только для специализированного кода, который хочет воссоздать объект Saver для ранее созданного Graph, у которого был Saver. Протокол saver_def должен быть тем, который возвращает метод as_saver_def() Saver, который был создан для Graph. |
builder | Необязательный SaverBuilder для использования, если saver_def не был предоставлен. По умолчанию равен BulkSaverBuilder(). |
defer_build | Если True, отложить добавление операций сохранения и восстановления до вызова build(). В этом случае следует вызвать build() перед финализацией графика или использованием сохранителя. |
allow_empty | Если False (по умолчанию), вызывать ошибку, если в графике нет переменных. В противном случае построить сохранитель и сделать его бездействующим. |
write_version | управляет тем, какой формат использовать при сохранении контрольных точек. Это также влияет на определенную логику сопоставления путей файлов. Рекомендуется использовать формат V2: он намного оптимизированнее, чем V1, с точки зрения памяти и задержки, возникающей при восстановлении. Независимо от этого флага, сохранитель может восстановить как из контрольных точек V2, так и из V1. |
pad_step_number | если True, добавляет к номерам глобальных шагов в путях файлов контрольных точек фиксированную ширину (по умолчанию 8). По умолчанию выключено. |
save_relative_paths | Если True, запишет относительные пути к файлу состояния контрольной точки. Это необходимо, если пользователь хочет скопировать директорию контрольной точки и перезагрузить из скопированной директории. |
filename | Если известно на этапе построения графика, имя файла, используемое для загрузки/сохранения переменных. |
| Исключения | |
|---|---|
TypeError | Если var_list недействительно. |
ValueError | Если какие-либо ключи или значения в var_list не уникальны. |
RuntimeError | Если выполнение с немедленным вычислением включено и var_list не указывает список переменных для сохранения. |
| Атрибуты | |
|---|---|
last_checkpoints | Список имен файлов контрольных точек, которые еще не удалены. Вы можете передать любое из возвращенных значений в |
Методы
as_saver_def
as_saver_def()
Генерирует представление SaverDef этого сохранителя.
| Возвращаемое значение | |
|---|---|
Протокол SaverDef. |
build
build()
export_meta_graph
export_meta_graph(
filename=None,
collection_list=None,
as_text=False,
export_scope=None,
clear_devices=False,
clear_extraneous_savers=False,
strip_default_attrs=False,
save_debug_info=False
)
Записывает MetaGraphDef в save_path/filename.
| Аргументы | |
|---|---|
filename | Необязательное имя файла meta_graph, включая путь. |
collection_list | Список строковых ключей для сбора. |
as_text | Если True, записывает meta_graph как ASCII протокол. |
export_scope | Необязательный string. Область имен для удаления. |
clear_devices | Требуется ли очистить поле устройства для Operation или Tensor при экспорте. |
clear_extraneous_savers | Удалить любую информацию, связанную с сохранителем, из графа (операции Save/Restore и SaverDefs), которые не связаны с этим сохранителем. |
strip_default_attrs | Логическое значение. Если True, атрибуты с значениями по умолчанию будут удалены из NodeDefs. Подробное руководство см. в Удаление атрибутов с значениями по умолчанию. |
save_debug_info | Если True, сохраните GraphDebugInfo в отдельный файл в той же директории, что и filename, добавив _debug перед расширением файла. |
| Возвращаемое значение | |
|---|---|
Протокол MetaGraphDef. |
from_proto
@staticmethod
from_proto(
saver_def, import_scope=None
)
Возвращает объект Saver, созданный из saver_def.
| Аргументы | |
|---|---|
saver_def | Протокол-буфер SaverDef. |
import_scope | Необязательная string. Область имен для использования. |
| Возвращаемое значение | |
|---|---|
Saver, созданный из saver_def. |
recover_last_checkpoints
recover_last_checkpoints(
checkpoint_paths
)
Восстанавливает внутреннее состояние сохранителя после сбоя.
Этот метод полезен для восстановления состояния "self._last_checkpoints".
Поиск файлов контрольных точек, указанных в checkpoint_paths. Если файлы существуют, используйте их mtime в качестве отметки времени контрольной точки.
| Аргументы | |
|---|---|
checkpoint_paths | Список путей к файлам контрольных точек. |
restore
restore(
sess, save_path
)
Восстанавливает ранее сохраненные переменные.
Этот метод выполняет операции, добавленные конструктором для восстановления переменных. Требуется сессия, в которой был запущен граф. Переменные для восстановления не обязательно должны быть инициализированы, так как восстановление само по себе является способом инициализации переменных.
Аргумент save_path обычно является значением, ранее возвращенным из вызова save() или вызова latest_checkpoint().
| Аргументы | |
|---|---|
sess | Сессия для использования при восстановлении параметров. None в режиме eager. |
save_path | Путь, где ранее были сохранены параметры. |
| Исключения | |
|---|---|
ValueError | Если save_path равен None или не является допустимой контрольной точкой. |
save
save(
sess,
save_path,
global_step=None,
latest_filename=None,
meta_graph_suffix='meta',
write_meta_graph=True,
write_state=True,
strip_default_attrs=False,
save_debug_info=False
)
Сохраняет переменные.
Этот метод выполняет операции, добавленные конструктором для сохранения переменных. Требуется сессия, в которой был запущен граф. Переменные для сохранения также должны быть инициализированы.
Метод возвращает префикс пути к недавно созданным файлам контрольных точек. Эту строку можно передать непосредственно в вызов restore().
| Аргументы | |
|---|---|
sess | Сессия для использования при сохранении переменных. |
save_path | Строка. Префикс имен файлов для контрольной точки. |
global_step | При наличии, номер глобального шага добавляется к save_path для создания имен файлов контрольных точек. Необязательный аргумент может быть Tensor, именем Tensor или целым числом. |
latest_filename | Необязательное имя файла протокола, который будет содержать список последних контрольных точек. Этот файл, находящийся в той же директории, что и файлы контрольных точек, автоматически управляется сохранителем для отслеживания последних контрольных точек. По умолчанию "checkpoint". |
meta_graph_suffix | Расширение для файла MetaGraphDef. По умолчанию "meta". |
write_meta_graph | Указание на то, необходимо ли записывать файл meta-графа. |
write_state | Указание на то, необходимо ли записывать CheckpointStateProto. |
strip_default_attrs | Логическое значение. Если True, атрибуты с значениями по умолчанию будут удалены из NodeDefs. Подробное руководство см. в Удаление атрибутов с значениями по умолчанию. |
save_debug_info | Если True, GraphDebugInfo сохраняется в отдельный файл в той же директории, что и save_path, добавив _debug перед расширением файла. Это включено только при write_meta_graph, равном True. |
| Возвращаемое значение | |
|---|---|
| Строка: префикс пути, используемый для файлов контрольных точек. Если сохранитель фрагментирован, эта строка заканчивается: '-?????-of-nnnnn', где 'nnnnn' — количество созданных фрагментов. Если сохранитель пустой, возвращает None. |
| Исключения | |
|---|---|
TypeError | Если sess не является Session. |
ValueError | Если latest_filename содержит компоненты пути или конфликтует с save_path. |
RuntimeError | Если операции сохранения и восстановления не были построены. |
set_last_checkpoints
set_last_checkpoints(
last_checkpoints
)
Устанавливает список старых имен файлов контрольных точек.
| Аргументы | |
|---|---|
last_checkpoints | Список имен файлов контрольных точек. |
| Исключения | |
|---|---|
AssertionError | Если last_checkpoints не является списком. |
set_last_checkpoints_with_time
set_last_checkpoints_with_time(
last_checkpoints_with_time
)
Устанавливает список старых файлов контрольных точек и временных меток.
| Аргументы | |
|---|---|
last_checkpoints_with_time | Список кортежей из имен файлов контрольных точек и временных меток. |
| Возможные исключения | |
|---|---|
AssertionError | Если last_checkpoints_with_time не является списком. |
to_proto
to_proto(
export_scope=None
)
Преобразует этот Saver в протокольный буфер SaverDef.
| Аргументы | |
|---|---|
export_scope | Необязательный string. Имя области, которое нужно удалить. |
| Возвращает | |
|---|---|
Протокольный буфер SaverDef. |
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/compat/v1/train/Saver