Spec-Zone.ru › TensorFlow 1.15

tf.estimator.train_and_evaluate

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

Обучить и оценить estimator.

Просмотр псевдонимов

Псевдонимы совместимости для миграции

См. Руководство по миграции для получения более подробной информации.

tf.compat.v1.estimator.train_and_evaluate, `tf.compat.v2.estimator.train_and_evaluate`

tf.estimator.train_and_evaluate(
    estimator, train_spec, eval_spec
)

Эта служебная функция обучает, оценивает и (необязательно) экспортирует модель, используя заданный estimator. Все спецификации, связанные с обучением, хранятся в train_spec, включая параметры обучения input_fn и максимальное количество шагов обучения и т. д. Все спецификации, связанные с оценкой и экспортом, хранятся в eval_spec, включая input_fn, шаги и т. д.

Эта служебная функция обеспечивает согласованное поведение как для локальных (не распределенных), так и для распределенных конфигураций. По умолчанию используется конфигурация распределённого вычисления, основанная на репликации между графами на основе сервера параметров. Для других типов конфигураций распределённого вычисления, таких как обучение с использованием all-reduce, используйте DistributionStrategies.

Переобучение: для предотвращения переобучения рекомендуется настроить обучение input_fn для правильного перемешивания обучающих данных.

Условие остановки: для надёжной поддержки как распределённых, так и нераспределённых конфигураций единственным поддерживаемым условием остановки обучения модели является train_spec.max_steps. Если train_spec.max_steps установлено None, модель будет обучаться бесконечно. Используйте с осторожностью, если условие остановки модели отличается. Например, предположим, что модель должна быть обучена с одной эпохой обучающих данных, и конфигурация обучения input_fn настроена так, чтобы выбросить OutOfRangeError после прохождения одной эпохи, что останавливает Estimator.train. В распределённой конфигурации с тремя рабочими узлами для обучения каждый рабочий узел, скорее всего, пройдёт всю эпоху независимо. Таким образом, модель будет обучена с тремя эпохами обучающих данных вместо одной.

Пример локального (не распределённого) обучения:

# Set up feature columns.
categorial_feature_a = categorial_column_with_hash_bucket(...)
categorial_feature_a_emb = embedding_column(
    categorical_column=categorial_feature_a, ...)
...  # other feature columns

estimator = DNNClassifier(
    feature_columns=[categorial_feature_a_emb, ...],
    hidden_units=[1024, 512, 256])

# Or set up the model directory
#   estimator = DNNClassifier(
#       config=tf.estimator.RunConfig(
#           model_dir='/my_model', save_summary_steps=100),
#       feature_columns=[categorial_feature_a_emb, ...],
#       hidden_units=[1024, 512, 256])

# Input pipeline for train and evaluate.
def train_input_fn(): # returns x, y
  # please shuffle the data.
  pass
def eval_input_fn(): # returns x, y
  pass

train_spec = tf.estimator.TrainSpec(input_fn=train_input_fn, max_steps=1000)
eval_spec = tf.estimator.EvalSpec(input_fn=eval_input_fn)

tf.estimator.train_and_evaluate(estimator, train_spec, eval_spec)

Обратите внимание, что в текущей реализации estimator.evaluate будет вызываться несколько раз. Это означает, что граф оценки (включая eval_input_fn) будет пересоздан для каждого вызова evaluate. estimator.train будет вызван только один раз.

Пример распределённого обучения:

Что касается примера распределённого обучения, приведенный выше код может быть использован без изменений (Убедитесь, что RunConfig.model_dir для всех рабочих узлов установлен в один и тот же каталог, т. е. в общую файловую систему, к которой все рабочие узлы имеют доступ для чтения и записи). Единственная дополнительная работа — правильная установка переменной среды TF_CONFIG для каждого рабочего узла соответственно.

Также см. Распределённый TensorFlow.

Установка переменной среды зависит от платформы. Например, в Linux это можно сделать следующим образом ($ — это командная строка оболочки):

$ TF_CONFIG='<replace_with_real_content>' python train_model.py

Для содержимого TF_CONFIG, предположим, что спецификация кластера обучения выглядит следующим образом:

cluster = {"chief": ["host0:2222"],
           "worker": ["host1:2222", "host2:2222", "host3:2222"],
           "ps": ["host4:2222", "host5:2222"]}

Пример TF_CONFIG для главного рабочего узла обучения (должен быть один и только один):

# This should be a JSON string, which is set as environment variable. Usually
# the cluster manager handles that.
TF_CONFIG='{
    "cluster": {
        "chief": ["host0:2222"],
        "worker": ["host1:2222", "host2:2222", "host3:2222"],
        "ps": ["host4:2222", "host5:2222"]
    },
    "task": {"type": "chief", "index": 0}
}'

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

Пример TF_CONFIG для рабочего узла обучения, не являющегося главным (необязательно, может быть несколько):

# This should be a JSON string, which is set as environment variable. Usually
# the cluster manager handles that.
TF_CONFIG='{
    "cluster": {
        "chief": ["host0:2222"],
        "worker": ["host1:2222", "host2:2222", "host3:2222"],
        "ps": ["host4:2222", "host5:2222"]
    },
    "task": {"type": "worker", "index": 0}
}'

где task.index должно быть установлено как 0, 1, 2 соответственно для рабочих узлов, не являющихся главными.

Пример TF_CONFIG для сервера параметров (может быть несколько):

# This should be a JSON string, which is set as environment variable. Usually
# the cluster manager handles that.
TF_CONFIG='{
    "cluster": {
        "chief": ["host0:2222"],
        "worker": ["host1:2222", "host2:2222", "host3:2222"],
        "ps": ["host4:2222", "host5:2222"]
    },
    "task": {"type": "ps", "index": 0}
}'

где task.index должно быть установлено как 0 и 1 соответственно для серверов параметров.

Пример TF_CONFIG для задачи оценки. Оценщик — это специальная задача, которая не является частью кластера обучения. Может быть только одна. Она используется для оценки модели.

# This should be a JSON string, which is set as environment variable. Usually
# the cluster manager handles that.
TF_CONFIG='{
    "cluster": {
        "chief": ["host0:2222"],
        "worker": ["host1:2222", "host2:2222", "host3:2222"],
        "ps": ["host4:2222", "host5:2222"]
    },
    "task": {"type": "evaluator", "index": 0}
}'

Когда distribute или experimental_distribute.train_distribute и experimental_distribute.remote_cluster установлены, этот метод запустит клиент, работающий на текущем узле, который подключается к remote_cluster для обучения и оценки.

Аргументы
estimator Экземпляр Estimator для обучения и оценки.
train_spec Экземпляр TrainSpec для задания параметров обучения.
eval_spec Экземпляр EvalSpec для задания параметров оценки и экспорта.
Возвращаемые значения
Кортеж из результата вызова evaluate к Estimator и результатов экспорта, используя указанные ExportStrategy. В настоящее время возвращаемое значение не определено для распределённого режима обучения.
Исключения
ValueError если переменная среды TF_CONFIG установлена неправильно.

© 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/estimator/train_and_evaluate

Spec-Zone.ru

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