tf.contrib.data.CheckpointInputPipelineHook
Сохраняет состояние входной конвейерной обработки каждые N шагов или секунд.
Наследуется от: CheckpointInputPipelineHook
tf.contrib.data.CheckpointInputPipelineHook(
estimator
)
Этот хук сохраняет состояние итераторов в Graph, чтобы при возобновлении обучения входной конвейер продолжался с того места, где он остановился. Это может потенциально предотвратить переобучение в определенных конвейерах, где количество шагов обучения на оценку невелико по сравнению с размером набора данных, или если конвейер обучения прерывается.
Отличия от CheckpointSaverHook:
- Сохраняются только входные конвейеры в коллекции "итераторы", а не глобальные переменные или другие сохраняемые объекты.
- Не записывает
GraphDefиMetaGraphDefв сводку.
Пример сохранения конвейера обучения:
est = tf.estimator.Estimator(model_fn)
while True:
est.train(
train_input_fn,
hooks=[tf.data.experimental.CheckpointInputPipelineHook(est)],
steps=train_steps_per_eval)
# Note: We do not pass the hook here.
metrics = est.evaluate(eval_input_fn)
if should_stop_the_training(metrics):
break
Этот хук следует использовать, если состояние входного конвейера необходимо сохранить отдельно от контрольной точки модели. Это может быть полезно по нескольким причинам:
- Контрольная точка входного конвейера может быть большой, если, например, существуют большие буферы перемешивания или предварительной выборки, и может увеличить размер контрольной точки.
- Если входной конвейер используется как для обучения, так и для проверки, восстановление контрольной точки во время проверки может перезаписать входной конвейер для проверки.
Для сохранения контрольной точки входного конвейера вместе с весами модели используйте tf.data.experimental.make_saveable_from_iterator напрямую для создания SaveableObject и добавления в коллекцию SAVEABLE_OBJECTS. Однако, необходимо быть осторожным, чтобы не восстанавливать итератор обучения во время проверки. Вы можете это сделать, не добавляя итератор в коллектор SAVEABLE_OBJECTS при построении графа проверки.
Методы
after_create_session
after_create_session(
session, coord
)
Вызывается при создании новой сессии TensorFlow.
Это вызывается для уведомления хуков о том, что была создана новая сессия. В этом есть два основных отличия от ситуации, когда вызывается begin:
- Когда это вызывается, граф окончательно сформирован, и к графу больше нельзя добавлять операции.
- Этот метод также будет вызван в результате восстановления обернутой сессии, а не только в начале общей сессии.
| Аргументы | |
|---|---|
session | Сессия TensorFlow, которая была создана. |
coord | Объект Coordinator, который отслеживает все потоки. |
after_run
after_run(
run_context, run_values
)
Вызывается после каждого вызова run().
Аргумент run_values содержит результаты запрошенных операций/тензоров вызовом before_run().
Аргумент run_context — тот же, что передается в вызов before_run. Можно вызвать run_context.request_stop() для остановки итерации.
Если session.run() вызывает какие-либо исключения, то after_run() не вызывается.
| Аргументы | |
|---|---|
run_context | Объект SessionRunContext. |
run_values | Объект SessionRunValues. |
before_run
before_run(
run_context
)
Вызывается перед каждым вызовом run().
Можно вернуть из этого вызова объект SessionRunArgs, указывающий на операции или тензоры, которые нужно добавить к предстоящему вызову run(). Эти операции/тензоры будут выполняться вместе с операциями/тензорами, изначально переданными в исходный вызов run(). Аргументы run, которые вы возвращаете, также могут содержать значения для добавления в вызов run().
Аргумент run_context — это SessionRunContext, который предоставляет информацию о предстоящем вызове run(): первоначально запрошенные операции/тензоры, сессия TensorFlow.
На этом этапе граф окончательно сформирован, и вы больше не можете добавлять операции.
| Аргументы | |
|---|---|
run_context | Объект SessionRunContext. |
| Возвращает | |
|---|---|
None или объект SessionRunArgs . |
begin
begin()
Вызывается один раз перед использованием сессии.
При вызове текущим является базовый граф, который будет запущен в сессии. Хук может изменять граф, добавляя новые операции. После вызова begin() граф будет окончательно сформирован, и другие обратные вызовы больше не смогут изменять граф. Второй вызов begin() на том же графе не должен изменять граф.
end
end(
session
)
Вызывается в конце сессии.
Аргумент session можно использовать в случае, если хук хочет выполнить окончательные операции, например, сохранение последней контрольной точки.
Если session.run() вызывает исключение, отличное от OutOfRangeError или StopIteration, то end() не вызывается. Обратите внимание на разницу в поведении end() и after_run() при вызове session.run() с исключениями OutOfRangeError или StopIteration. В этом случае end() вызывается, но after_run() не вызывается.
| Аргументы | |
|---|---|
session | Сессия TensorFlow, которая будет вскоре закрыта. |
© 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/r1.15/api_docs/python/tf/contrib/data/CheckpointInputPipelineHook