Spec-Zone.ru › TensorFlow 2.9

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 по адресу https://www.tensorflow.org/guide/migrate, чтобы получить инструкции по миграции остальной части вашего кода.

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

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

Методы

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
)
Устарело: Используйте 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/versions/r2.9/api_docs/python/tf/compat/v1/train/Saver

Spec-Zone.ru

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