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
Для управления контрольными точками в TF2 используйте tf.train.CheckpointManager. 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, содержащий метку времени создания каждой контрольной точки.
Запись MetaGraphDefs в 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() можно указать другое имя файла буфера протокола.
| Аргументы | |
|---|---|
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, который при значении 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, с точки зрения объема требуемой памяти и задержки при восстановлении. Независимо от этого флага Saver может восстанавливать контрольные точки в форматах 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 | Удаляет из графа всю информацию, связанную с Saver (операции сохранения/восстановления и 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
)
Восстанавливает внутреннее состояние сохранителя после сбоя.
Этот метод полезен для восстановления состояния «self._last_checkpoints».
Выполняет поиск контрольных точек, на которые указывает checkpoint_paths. Если файлы существуют, в качестве метки времени контрольной точки используется время их последнего изменения.
| Аргументы | |
|---|---|
checkpoint_paths | список путей к контрольным точкам. |
restore
restore(
sess, save_path
)
Восстанавливает ранее сохраненные переменные.
Этот метод запускает операции, добавленные конструктором для восстановления переменных. Для этого необходим сеанс, в котором был запущен граф. Восстанавливаемые переменные не обязательно должны быть инициализированы, поскольку восстановление само по себе служит способом инициализации переменных.
Аргумент save_path обычно представляет собой значение, ранее возвращенное вызовом save() или вызовом latest_checkpoint().
| Аргументы | |
|---|---|
sess | Объект Session для восстановления параметров. В режиме eager execution — None. |
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 | Объект Boolean, указывающий, нужно ли записывать файл метаграфа. |
write_state | Объект Boolean, указывающий, нужно ли записывать 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