Spec-Zone.ru › TensorFlow 2.4

tf.compat.v1.train.Supervisor

Помощник для обучения, который создаёт контрольные точки моделей и вычисляет сводки.

tf.compat.v1.train.Supervisor(
    graph=None, ready_op=USE_DEFAULT, ready_for_local_init_op=USE_DEFAULT,
    is_chief=True, init_op=USE_DEFAULT, init_feed_dict=None,
    local_init_op=USE_DEFAULT, logdir=None, summary_op=USE_DEFAULT,
    saver=USE_DEFAULT, global_step=USE_DEFAULT, save_summaries_secs=120,
    save_model_secs=600, recovery_wait_secs=30, stop_grace_secs=120,
    checkpoint_basename='model.ckpt', session_manager=None,
    summary_writer=USE_DEFAULT, init_fn=None, local_init_run_options=None
)

Этот класс устарел. Используйте tf.compat.v1.train.MonitoredTrainingSession вместо него.

Supervisor — это небольшой обертка вокруг Coordinator, Saver, и SessionManager, которая заботится о распространённых потребностях программ обучения TensorFlow.

Использование для одной программы

with tf.Graph().as_default():
  ...add operations to the graph...
  # Create a Supervisor that will checkpoint the model in '/tmp/mydir'.
  sv = Supervisor(logdir='/tmp/mydir')
  # Get a TensorFlow session managed by the supervisor.
  with sv.managed_session(FLAGS.master) as sess:
    # Use the session to train the graph.
    while not sv.should_stop():
      sess.run(<my_train_op>)

Внутри блока with sv.managed_session() все переменные в графе инициализированы. Кроме того, несколько служб запущены для создания контрольных точек модели и добавления сводок в журнал событий.

Если программа аварийно завершается и перезапускается, управляемая сессия автоматически повторно инициализирует переменные из последней контрольной точки.

Supervisor уведомляется обо всех исключениях, возбуждаемых одной из служб. После возбуждения исключения, should_stop() возвращает True. В этом случае цикл обучения также должен остановиться. Вот почему цикл обучения должен проверять sv.should_stop().

Исключения, указывающие на то, что входные данные для обучения исчерпаны, tf.errors.OutOfRangeError, также заставляют sv.should_stop() вернуть True, но не перебрасываются повторно из блока with: они указывают на нормальное завершение.

Использование для нескольких реплик

Для обучения с репликами вы развертываете одну и ту же программу в Cluster. Одна из задач должна быть идентифицирована как главная: задача, которая обрабатывает инициализацию, контрольные точки, сводки и восстановление. Другие задачи зависят от главной задачи для этих служб.

Единственное изменение, которое вы должны сделать в коде программы для одной программы, заключается в указании, выполняется ли программа как главная.

# Choose a task as the chief. This could be based on server_def.task_index,
# or job_def.name, or job_def.tasks. It's entirely up to the end user.
# But there can be only one *chief*.
is_chief = (server_def.task_index == 0)
server = tf.distribute.Server(server_def)

with tf.Graph().as_default():
  ...add operations to the graph...
  # Create a Supervisor that uses log directory on a shared file system.
  # Indicate if you are the 'chief'
  sv = Supervisor(logdir='/shared_directory/...', is_chief=is_chief)
  # Get a Session in a TensorFlow server on the cluster.
  with sv.managed_session(server.target) as sess:
    # Use the session to train the graph.
    while not sv.should_stop():
      sess.run(<my_train_op>)

В главной задаче Supervisor работает точно так же, как в первом примере выше. В других задачах sv.managed_session() ожидает, пока Модель будет инициализирована, прежде чем возвращать сессию коду обучения. Дочерние задачи зависят от главной задачи для инициализации модели.

Если одна из задач аварийно завершается и перезапускается, managed_session() проверяет, инициализирована ли Модель. Если да, она просто создаёт сессию и возвращает её коду обучения, который продолжает работу нормально. Если модель нуждается в инициализации, главная задача позаботится об её повторной инициализации; другие задачи просто ждут, пока модель не будет инициализирована.

Примечание: Эта изменённая программа по-прежнему работает как программа для одной программы. Программа для одной программы маркирует себя как главную.

Использование строки master

Независимо от того, работаете ли вы на своём компьютере или в кластере, вы можете использовать следующие значения для флага --master:

  • Указание '' запрашивает сессию в процессе, которая не использует RPC.

  • Указание 'local' запрашивает сессию, которая использует RPC-базированный «интерфейс мастера» для запуска программ TensorFlow. Подробнее см. tf.train.Server.create_local_server.

  • Указание 'grpc://hostname:port' запрашивает сессию, которая использует интерфейс RPC к определённому хосту, а также позволяет мастеру в процессе обращаться к удалённым рабочим TensorFlow. Часто уместно передавать server.target (для некоторого tf.distribute.Server с именем `server).

Расширенное использование

Запуск дополнительных служб

managed_session() запускает службы создания контрольных точек и сводок (потоки). Если вам нужно запустить дополнительные службы, вы можете просто запустить их в блоке, управляемом managed_session().

Пример: Запустите поток для вывода потерь. Мы хотим, чтобы этот поток выполнялся каждые 60 секунд, поэтому мы запускаем его с помощью sv.loop().

...
sv = Supervisor(logdir='/tmp/mydir')
with sv.managed_session(FLAGS.master) as sess:
  sv.loop(60, print_loss, (sess, ))
  while not sv.should_stop():
    sess.run(my_train_op)
Запуск меньшего количества служб

managed_session() запускает потоки «сводка» и «контрольная точка», которые используют необязательные summary_op и saver, переданные в конструктор, или по умолчанию созданные Supervisor автоматически. Если вы хотите выполнить свою логику сводки и создания контрольных точек, отключите эти службы, передав None параметрам summary_op и saver.

Пример: Создайте сводки вручную каждые 100 шагов в главном процессе.

# Create a Supervisor with no automatic summaries.
sv = Supervisor(logdir='/tmp/mydir', is_chief=is_chief, summary_op=None)
# As summary_op was None, managed_session() does not start the
# summary thread.
with sv.managed_session(FLAGS.master) as sess:
  for step in xrange(1000000):
    if sv.should_stop():
      break
    if is_chief and step % 100 == 0:
      # Create the summary every 100 chief steps.
      sv.summary_computed(sess, sess.run(my_summary_op))
    else:
      # Train normally
      sess.run(my_train_op)
Настройка инициализации модели

managed_session() поддерживает инициализацию модели только путём запуска init_op или восстановления из последней контрольной точки. Если у вас есть особые потребности в инициализации, см., как указать local_init_op, при создании supervisor. Вы также можете использовать SessionManager напрямую для создания сессии и проверки, может ли она быть инициализирована автоматически.

Аргументы
graph Граф, который будет использоваться моделью. По умолчанию — это основной граф. Supervisor может добавить операции в граф перед созданием сессии, но граф не должен изменяться вызывающим приложением после передачи его supervisor.
ready_op Строковый тензор 1-мерного типа. Этот тензор оценивается supervisor в prepare_or_wait_for_session() для проверки готовности модели к использованию. Модель считается готовой, если она возвращает пустой массив. По умолчанию — тензор, возвращаемый из tf.compat.v1.report_uninitialized_variables() Если None, готовность модели не проверяется.
ready_for_local_init_op Строковый тензор 1-мерного типа. Этот тензор оценивается supervisor в prepare_or_wait_for_session() для проверки готовности модели к запуску local_init_op. Модель считается готовой, если она возвращает пустой массив. По умолчанию — None. Если None, готовность модели перед запуском local_init_op не проверяется.
is_chief Если True, создаёт главного supervisor, ответственного за инициализацию и восстановление модели. Если False, создаёт supervisor, который полагается на главного supervisor для инициализации и восстановления.
init_op Функция инициализации. Используется главными supervisor для инициализации модели, когда её нельзя восстановить. По умолчанию — функция, которая инициализирует все глобальные переменные. Если None, автоматическая инициализация не выполняется, если не указано значение для init_fn, см. ниже.
init_feed_dict Словарь, который сопоставляет объекты Tensor с значениями feed. Этот словарь feed будет использоваться при оценке init_op
local_init_op Функция инициализации. Используется всеми supervisor для запуска инициализаций, которые должны выполняться для каждого нового экземпляра supervisor. По умолчанию — инициализаторы таблиц и локальных переменных. Если None, дальнейшая инициализация на уровне экземпляра supervisor не выполняется автоматически.
logdir Строка. Необязательный путь к каталогу, в котором нужно создать контрольные точки модели и логировать события для визуализатора. Используется главными supervisor. Каталог будет создан, если он не существует.
summary_op Функция, возвращающая Summary для журналов событий. Используется главными supervisor, если был указан logdir. По умолчанию — операция, возвращённая из summary.merge_all(). Если None, сводки не вычисляются автоматически.
saver Объект Saver. Используется главными supervisor, если был указан logdir. По умолчанию — сохранение, возвращённое Saver(). Если None, модель не сохраняется автоматически.
global_step Целочисленный тензор размера 1, который считает шаги. Значение из 'global_step' используется в сводках и именах файлов контрольных точек. По умолчанию — операция с именем 'global_step' в графе, если она существует, имеет ранг 1, размер 1 и тип tf.int32 или tf.int64. Если None, глобальный шаг не записывается в сводки и файлы контрольных точек. Используется главными supervisor, если был указан logdir .
save_summaries_secs Количество секунд между вычислением сводок для журнала событий. По умолчанию — 120 секунд. Передайте 0, чтобы отключить сводки.
save_model_secs Количество секунд между созданием контрольных точек модели. По умолчанию — 600 секунд. Передайте 0, чтобы отключить контрольные точки.
recovery_wait_secs Количество секунд между проверками готовности модели. Используется supervisor при ожидании главного supervisor для инициализации или восстановления модели. По умолчанию — 30 секунд.
stop_grace_secs Срок ожидания, в секундах, предоставляемый работающим потокам для остановки, когда вызывается stop(). По умолчанию — 120 секунд.
checkpoint_basename Имя файла для сохранения контрольных точек.
session_manager Управляющий сессиями. Если это None, создаётся по умолчанию SessionManager с набором переданных аргументов для обеспечения обратной совместимости.
summary_writer SummaryWriter для использования или USE_DEFAULT. Может быть None, чтобы указать, что сводки не должны записываться.
init_fn Необязательная функция, используемая для инициализации модели. Вызывается после вызова необязательного init_op. Функция должна принимать один аргумент — сессию, которая будет инициализирована.
local_init_run_options RunOptions, которые должны передаваться как параметр SessionManager local_init_run_options.
Возбуждает
RuntimeError Если вызов осуществляется с включённым eager-вычислением.
Атрибуты
coord Возвращает координатор, используемый надзирателем.

Координатор может быть полезен, если вы хотите запустить несколько потоков во время обучения.

global_step Возвращает тензор global_step, используемый надзирателем.
init_feed_dict Возвращает словарь feed, используемый при оценке init_op.
init_op Возвращает оператор Init, используемый надзирателем.
is_chief Возвращает True, если это главный надзиратель.
ready_for_local_init_op
ready_op Возвращает оператор Ready, используемый надзирателем.
save_model_secs Возвращает задержку между контрольными точками.
save_path Возвращает путь сохранения, используемый надзирателем.
save_summaries_secs Возвращает задержку между вычислениями сводки.
saver Возвращает Saver, используемый надзирателем.
session_manager Возвращает SessionManager, используемый надзирателем.
summary_op Возвращает тензор Summary, используемый главным надзирателем.
summary_writer Возвращает SummaryWriter, используемый главным надзирателем.

Методы

Loop

Просмотреть исходный код

Loop(
    timer_interval_secs, target, args=None, kwargs=None
)

Запускает LooperThread, который периодически вызывает функцию.

Если timer_interval_secs равно None, поток вызывает target(*args, **kwargs) повторно. В противном случае он вызывает его каждые timer_interval_secs секунд. Поток завершается, когда запрос на остановку.

Запущенный поток добавляется в список потоков, управляемых надзирателем, поэтому его не нужно передавать методу stop().

Аргументы
timer_interval_secs Число. Границы времени, в которые нужно вызвать target.
target Вызываемый объект.
args Необязательные аргументы для передачи методу target при его вызове.
kwargs Необязательные ключевые аргументы для передачи методу target при его вызове.
Возвращает
Запущенный поток.

PrepareSession

Просмотреть исходный код

PrepareSession(
    master='', config=None, wait_for_checkpoint=False, max_wait_secs=7200,
    start_standard_services=True
)

Убедитесь, что модель готова к использованию.

Создайте сеанс в 'master', восстанавливая или инициализируя модель по мере необходимости или ожидайте готовности сеанса. Если выполняется как главный и start_standard_service установлено в True, также вызовите менеджер сеансов для запуска стандартных служб.

Аргументы
master Имя TensorFlow мастер-узла для использования. Обратитесь к конструктору tf.compat.v1.Session для получения информации о том, как это интерпретируется.
config Необязательный ConfigProto протокол для настройки сеанса, который передается как есть для создания сеанса.
wait_for_checkpoint Нужно ли ждать наличия контрольной точки перед созданием сеанса. По умолчанию False.
max_wait_secs Максимальное время ожидания готовности сеанса.
start_standard_services Нужно ли запускать стандартные сервисы и запуск очередей.
Возвращает
Объект Session, который можно использовать для управления моделью.

RequestStop

Просмотреть исходный код

RequestStop(
    ex=None
)

Запросить остановку потоков координатором.

См. Coordinator.request_stop().

Аргументы
ex Необязательный Exception, или кортеж Python exc_info, как возвращается sys.exc_info(). Если это первый вызов request_stop(), соответствующее исключение записывается и повторно генерируется из join().

ShouldStop

Просмотреть исходный код

ShouldStop()

Проверить, было ли сказано координатору остановиться.

См. Coordinator.should_stop().

Возвращает
True, если координатору было сказано остановиться, иначе False.

StartQueueRunners

Просмотреть исходный код

StartQueueRunners(
    sess, queue_runners=None
)

Запустить потоки для QueueRunners.

Обратите внимание, что потоки очереди, собранные в ключе графа QUEUE_RUNNERS, уже автоматически запускаются при создании сеанса с надзирателем, поэтому, если у вас нет потоков очереди, которые нужно запустить, нет необходимости вызывать это явно.

Аргументы
sess Session.
queue_runners Список QueueRunners. Если не указано, мы будем использовать список потоков очереди, собранных в графе по ключу GraphKeys.QUEUE_RUNNERS.
Возвращает
Список потоков, запущенных для QueueRunners .
Возможные исключения
RuntimeError Если вызов сделан с включенным выполнением eager.

Совместимость с Eager

Очереди несовместимы с выполнением eager. Для загрузки данных при включенном выполнении eager используйте API tf.data.

StartStandardServices

Просмотреть исходный код

StartStandardServices(
    sess
)

Запустить стандартные службы для 'sess'.

Это запускает службы в фоновом режиме. Запускаемые службы зависят от параметров конструктора и могут включать:

  • Поток Summary, вычисляющий сводки каждые save_summaries_secs.
  • Поток Checkpoint, сохраняющий модель каждые save_model_secs.
  • Поток StepCounter для измерения времени шага.
Аргументы
sess Сеанс.
Возвращает
Список потоков, выполняющих стандартные службы. Вы можете использовать координатор надзирателя для объединения этих потоков: sv.coord.Join(<список="" потоков="">)
Возможные исключения
RuntimeError Если вызов сделан с неглавным надзирателем.
ValueError Если не был передан logdir, так как службам необходим каталог журнала.

Stop

Просмотреть исходный код

Stop(
    threads=None, close_summary_writer=True, ignore_live_threads=False
)

Остановить службы и координатор.

Это не закрывает сеанс.

Аргументы
threads Необязательный список потоков, которые нужно объединить с координатором. Если None, по умолчанию потоки, выполняющие стандартные службы, потоки, запущенные для QueueRunners, и потоки, запущенные методом loop(). Чтобы подождать дополнительные потоки, передайте список в этом параметре.
close_summary_writer Нужно ли закрывать summary_writer? По умолчанию True, если записыватель сводок был создан надзирателем, False в противном случае.
ignore_live_threads Если True игнорирует потоки, которые остаются запущенными после периода ожидания при объединении потоков через координатор, вместо того, чтобы генерировать RuntimeError.

StopOnException

Просмотреть исходный код

StopOnException()

Обработчик контекста для остановки надзирателя при возникновении исключения.

См. Coordinator.stop_on_exception().

Возвращает
Обработчик контекста.

SummaryComputed

Просмотреть исходный код

SummaryComputed(
    sess, summary, global_step=None
)

Указать, что сводка была вычислена.

Аргументы
sess Объект Session.
summary Протокол Summary или строка, содержащая сериализованный протокол Summary.
global_step Целое число. Глобальный шаг, с которым связана эта сводка. Если None, он попытается получить текущий шаг.
Исключения
TypeError если 'summary' не является протоколом Summary или строкой.
RuntimeError если Supervisor был создан без logdir.

WaitForStop

Просмотреть исходный код

WaitForStop()

Ожидать остановки координатора.

loop

Просмотреть исходный код

loop(
    timer_interval_secs, target, args=None, kwargs=None
)

Запустить поток LooperThread, который периодически вызывает функцию.

Если timer_interval_secs равно None, поток вызывает target(*args, **kwargs) многократно. В противном случае он вызывает её каждые timer_interval_secs секунды. Поток завершается при запросе остановки.

Запущенный поток добавляется в список потоков, управляемых Supervisor, поэтому его не нужно передавать методу stop().

Аргументы
timer_interval_secs Число. Время, в которое нужно вызвать target.
target Вызываемый объект.
args Дополнительные аргументы для передачи в target при его вызове.
kwargs Дополнительные ключевые аргументы для передачи в target при его вызове.
Возвращаемое значение
Запущенный поток.

managed_session

Просмотреть исходный код

@contextlib.contextmanager
managed_session(
    master='', config=None, start_standard_services=True,
    close_summary_writer=True
)

Возвращает менеджер контекста для управляемой сессии.

Этот менеджер контекста создаёт и автоматически восстанавливает сессию. При необходимости он запускает стандартные службы, которые обрабатывают контрольные точки и сводки. Он отслеживает исключения, поднятые из блока with, или из служб и останавливает Supervisor при необходимости.

Менеджер контекста обычно используется следующим образом:

def train():
  sv = tf.compat.v1.train.Supervisor(...)
  with sv.managed_session(<master>) as sess:
    for step in xrange(..):
      if sv.should_stop():
        break
      sess.run(<my training op>)
      ...do other things needed at each training step...

Исключение, поднятое из блока with или одного из потоков службы, вновь поднимается при выходе из блока. Это делается после остановки всех потоков и закрытия сессии. Например, исключение AbortedError, поднятое в случае прерывания одного из рабочих элементов в распределённой модели, вновь поднимается при выходе из блока.

Если вы хотите повторить цикл обучения в случае прерывания, вы можете сделать это следующим образом:

def main(...):
  while True
    try:
      train()
    except tf.errors.Aborted:
      pass

В качестве специального случая исключения, используемые для управления потоком, такие как OutOfRangeError, которые сообщают о том, что очереди ввода исчерпаны, не поднимаются повторно из блока with: они указывают на чистый выход цикла обучения и считаются нормальным завершением.

Аргументы
master Имя TensorFlow-мастера для использования. Смотрите конструктор tf.compat.v1.Session для интерпретации этого параметра.
config Необязательный протокол ConfigProto, используемый для настройки сессии. Передаётся в create как есть.
start_standard_services Нужно ли запускать стандартные службы, такие как контрольные точки, сводки и счётчик шагов.
close_summary_writer Нужно ли закрывать записыватель сводок при закрытии сессии. По умолчанию True.
Возвращаемое значение
Менеджер контекста, который возвращает Session восстанавливаемый из последней контрольной точки или инициализированный с нуля, если контрольная точка не существует. Сессия закрывается при выходе из блока with.

prepare_or_wait_for_session

Просмотреть исходный код

prepare_or_wait_for_session(
    master='', config=None, wait_for_checkpoint=False, max_wait_secs=7200,
    start_standard_services=True
)

Убедитесь, что модель готова к использованию.

Создать сессию на 'master', восстанавливая или инициализируя модель по мере необходимости, или подождать, пока сессия будет готова. Если выполняться в качестве главного и start_standard_service установлено в True, также вызывать менеджер сессии для запуска стандартных служб.

Аргументы
master Имя TensorFlow-мастера для использования. Смотрите конструктор tf.compat.v1.Session для интерпретации этого параметра.
config Необязательный протокол ConfigProto, используемый для настройки сессии. Передаётся в create как есть.
wait_for_checkpoint Нужно ли ждать доступности контрольной точки перед созданием Session. По умолчанию False.
max_wait_secs Максимальное время ожидания готовности сессии.
start_standard_services Нужно ли запускать стандартные службы и запуски очередей.
Возвращаемое значение
Объект Session, который может использоваться для управления моделью.

request_stop

Просмотреть исходный код

request_stop(
    ex=None
)

Запросить остановку потоков координатором.

См. Coordinator.request_stop().

Аргументы
ex Необязательное исключение или кортеж Python, возвращённый sys.exc_info(). Если это первый вызов request_stop(), соответствующее исключение записывается и вновь поднимается из join().

should_stop

Просмотреть исходный код

should_stop()

Проверить, не было ли сказано координатору остановиться.

См. Coordinator.should_stop().

Возвращаемое значение
True, если координатору было сказано остановиться, False в противном случае.

start_queue_runners

Просмотреть исходный код

start_queue_runners(
    sess, queue_runners=None
)

Запустить потоки для QueueRunners.

Обратите внимание, что запуски очередей, собранные в ключе графа QUEUE_RUNNERS, уже автоматически запускаются при создании сессии с Supervisor, поэтому, если у вас нет запусков очередей, не вошедших в сборку, вам не нужно вызывать это явно.

Аргументы
sess Session.
queue_runners Список QueueRunners. Если не указан, мы будем использовать список запусков очередей, собранных в графе по ключу GraphKeys.QUEUE_RUNNERS.
Возвращаемое значение
Список потоков, запущенных для QueueRunners .
Исключения
RuntimeError Если вызов сделан при включённом выполнении eager.

Совместимость с eager

Очереди несовместимы с eager-выполнением. Для приема данных при включенном eager-выполнении используйте API tf.data.

start_standard_services

Просмотреть исходный код

start_standard_services(
    sess
)

Запустить стандартные службы для 'sess'.

Это запускает службы в фоновом режиме. Запускаемые службы зависят от параметров конструктора и могут включать:

  • Поток Summary, вычисляющий сводки каждые save_summaries_secs.
  • Поток Checkpoint, сохраняющий модель каждые save_model_secs.
  • Поток StepCounter, измеряющий время шага.
Аргументы
sess Сессия.
Возвращаемое значение
Список потоков, выполняющих стандартные службы. Вы можете использовать координатор Supervisor для присоединения к этим потокам: sv.coord.Join()
END_OF_DOCUMENT_MARKER
Исключения
RuntimeError Если вызывается с неглавным руководителем (Supervisor).
ValueError Если не logdir было передано в конструктор, так как службам требуется каталог журнала.

stop

Просмотреть исходный код

stop(
    threads=None, close_summary_writer=True, ignore_live_threads=False
)

Остановка служб и координатора.

Это не закрывает сеанс.

Аргументы
threads Необязательный список потоков, которые нужно присоединить к координатору. Если None, по умолчанию используются потоки, выполняющие стандартные службы, потоки, запущенные для QueueRunners, и потоки, запущенные методом loop(). Чтобы дождаться дополнительных потоков, передайте список в этом параметре.
close_summary_writer Нужно ли закрывать summary_writer. По умолчанию True, если запись суммарных данных создана руководителем (Supervisor), False в противном случае.
ignore_live_threads Если True игнорирует потоки, которые остаются запущенными после периода ожидания при присоединении потоков через координатор, вместо того чтобы поднимать исключение RuntimeError.

stop_on_exception

Просмотреть исходный код

stop_on_exception()

Обработчик контекста для остановки руководителя (Supervisor) при возникновении исключения.

См. Coordinator.stop_on_exception().

Возвращаемое значение
Обработчик контекста.

summary_computed

Просмотреть исходный код

summary_computed(
    sess, summary, global_step=None
)

Указывает, что сводная информация была вычислена.

Аргументы
sess Объект Session .
summary Протокол Summary или строка, содержащая сериализованный протокол Summary.
global_step Целое число. Глобальный шаг, с которым связана эта сводная информация. Если None, он попытается получить текущий шаг.
Исключения
TypeError если 'summary' не является протоколом Summary или строкой.
RuntimeError если Supervisor был создан без logdir .

wait_for_stop

Просмотреть исходный код

wait_for_stop()

Ожидание остановки координатора.

Переменные класса
USE_DEFAULT 0

© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.4/api_docs/python/tf/compat/v1/train/Supervisor

Spec-Zone.ru

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