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 на эквивалент в native 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

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

Описание

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

Используется в руководстве
  • Миграция контрольных точек модели
  • Мигрировать поток 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().

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

Вы можете передать любое из возвращенных значений в 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 Удалить любую информацию, связанную с сохранителем, из графа (операции 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
)
Устарело: Используйте 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