Spec-Zone.ru › TensorFlow

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

Внимание: Этот API был разработан для TensorFlow v1. Продолжайте чтение, чтобы узнать, как перейти с этого API на встроенный эквивалент TensorFlow v2. Инструкции по переносу остального кода см. в руководстве по переходу с TensorFlow v1 на TensorFlow v2.

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).

Описание

Используется в блокнотах

Используется в руководстве
  • Перенос контрольных точек модели
  • Переход на рабочий процесс SavedModel

Обзор переменных, их сохранения и восстановления см. в разделе Переменные.

Класс 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 Список имен файлов контрольных точек, которые еще не удалены.

Любое из возвращенных значений можно передать в restore().

Методы

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
)
Устарел: Используйте set_last_checkpoints_with_time.

Задает список имен файлов старых контрольных точек.

Аргументы
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API