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 | Граф, который будет использовать модель. По умолчанию используется стандартный Graph. Supervisor может добавлять операции в граф перед созданием сессии, но граф не должен изменяться вызывающим объектом после передачи его Supervisor. |
ready_op | Строковый тензор 1-D Tensor. Этот тензор оценивается supervisor в prepare_or_wait_for_session() для проверки готовности модели к использованию. Модель считается готовой, если возвращает пустой массив. По умолчанию это тензор, возвращаемый из tf.compat.v1.report_uninitialized_variables() Если None, готовность модели не проверяется. |
ready_for_local_init_op | Строковый тензор 1-D Tensor. Этот тензор оценивается supervisor в prepare_or_wait_for_session() для проверки готовности модели к запуску local_init_op. Модель считается готовой, если возвращает пустой массив. По умолчанию None. Если None, готовность модели не проверяется перед запуском local_init_op. |
is_chief | Если True, создаётся Supervisor для главного процесса, ответственного за инициализацию и восстановление модели. Если False, создаётся supervisor, который полагается на Supervisor главного процесса для инициализации и восстановления. |
init_op | Operation. Используется главным Supervisor для инициализации модели, когда её нельзя восстановить. По умолчанию это Operation для инициализации всех глобальных переменных. Если None, автоматической инициализации не выполняется, если вы не передадите значение для init_fn, см. ниже. |
init_feed_dict | Словарь, который сопоставляет объекты Tensor с значениями подстановки. Этот словарь подстановки будет использоваться при оценке init_op . |
local_init_op | Operation. Используется всеми 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 | SessionManager, которая управляет созданием и восстановлением сессии. Если она 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 | Возвращает словарь входных данных, используемый при оценке 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 для конфигурирования сеанса, который передается в create_session напрямую. |
wait_for_checkpoint | Должны ли мы ждать доступности контрольной точки перед созданием сеанса. По умолчанию False. |
max_wait_secs | Максимальное время ожидания готовности сеанса. |
start_standard_services | Нужно ли запускать стандартные службы и очереди. |
| Возвращаемое значение | |
|---|---|
| Объект Session, который можно использовать для управления моделью. |
RequestStop
RequestStop(
ex=None
)
Запросить остановку потоков координатором.
См. Coordinator.request_stop().
| Аргументы | |
|---|---|
ex | Необязательное исключение, или кортеж Python, возвращаемый 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'.
Это запускает службы в фоновом режиме. Запускаемые службы зависят от параметров конструктора и могут включать:
- Поток сводок, вычисляющий сводки каждые save_summaries_secs.
- Поток контрольных точек, сохраняющий модель каждые 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
WaitForStop()
Указывает, что сводка была вычислена.
| Аргументы | |
|---|---|
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 секунды. Поток завершается при запросе остановки.
Запущенный поток добавляется в список потоков, управляемых супервизором, поэтому его не нужно передавать методу 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 или от сервисов и останавливает супервизор по мере необходимости.
Менеджер контекста обычно используется следующим образом:
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 для настройки сессии. Передаётся как есть для создания сессии. |
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 для настройки сессии, который передаётся как есть для создания сессии. |
wait_for_checkpoint | Нужно ли ждать доступности контрольной точки перед созданием сессии. По умолчанию 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, уже автоматически запускаются при создании сессии с использованием супервизора, поэтому, если у вас нет исполнителей очередей, которые нужно запустить, нет необходимости вызывать это явно.
| Аргументы | |
|---|---|
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(
|
| Исключения | |
|---|---|
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
-
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.3/api_docs/python/tf/compat/v1/train/Supervisor