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 | Значение Bool, которое, если истинно, приводит к последовательному восстановлению различных переменных на каждом устройстве. Это может снизить потребление памяти при восстановлении очень больших моделей. |
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 | Если известно на момент построения графа, используется имя файла для загрузки/сохранения переменных. |
| Raises | |
|---|---|
TypeError | Если var_list недействителен. |
ValueError | Если какие-либо ключи или значения в var_list не уникальны. |
RuntimeError | Если выполняется жадное выполнение, и var_list не указывает список переменных для сохранения. |
| Attributes | |
|---|---|
last_checkpoints | Список имен файлов контрольных точек, которые еще не удалены. Вы можете передать любое из возвращенных значений в |
Методы
as_saver_def
as_saver_def()
Генерирует представление SaverDef этого сэйвера.
| Returns | |
|---|---|
Протокол 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 | Удалить из графа любую информацию, связанную с Saver (операции Save/Restore и SaverDefs), которая не связана с этим Saver. |
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
)
Восстанавливает внутреннее состояние saver после сбоя.
Этот метод полезен для восстановления состояния "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 для создания имён файлов контрольной точки. Необязательный аргумент может быть целым числом, именем глобальной переменной или целым числом. |
latest_filename | Необязательное имя файла протокола, который будет содержать список последних контрольных точек. Этот файл, хранящийся в той же директории, что и файлы контрольных точек, автоматически управляется saver для отслеживания последних контрольных точек. По умолчанию равно 'checkpoint'. |
meta_graph_suffix | Суффикс для файла MetaGraphDef. По умолчанию равно 'meta'. |
write_meta_graph | Указывает, нужно ли записывать файл мета-графа. |
write_state | Указывает, нужно ли записывать CheckpointStateProto. |
strip_default_attrs | Булево значение. Если True, атрибуты с значениями по умолчанию будут удалены из NodeDefs. Для подробного руководства см. Удаление атрибутов с значениями по умолчанию. |
save_debug_info | Если True, сохранить GraphDebugInfo в отдельный файл в той же директории, что и save_path, с добавленным префиксом _debug перед расширением файла. Это включено только при write_meta_graph равном True |
| Возвращаемое значение | |
|---|---|
| Строка: префикс пути, используемый для файлов контрольной точки. Если saver фрагментирован, эта строка заканчивается: '-?????-of-nnnnn', где 'nnnnn' — количество созданных фрагментов. Если saver пустой, возвращает None. |
| Исключения | |
|---|---|
TypeError | Если sess не является Session . |
ValueError | Если latest_filename содержит компоненты пути или конфликтует с save_path. |
RuntimeError | Если операции save и restore не были построены. |
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/versions/r2.9/api_docs/python/tf/compat/v1/train/Saver