Частота оценки Tensorflow

Я использую функцию train_and_evaluate в тензорном потоке и хочу, чтобы шаг eval происходил чаще (либо по глобальному шагу, либо по истечении времени). Это мой код (функция модели не показана).

def get_classifier(batch_size):
    config = tf.estimator.RunConfig(
        model_dir="models/shape_model_cnn_3",
        save_checkpoints_secs=300,
        save_summary_steps=100)

    params = tf.contrib.training.HParams(
        batch_size=batch_size,
        num_conv=[48,64,96], # Sizes of each convolutional layer
        conv_len=[2,3,4], # Kernel size of each convolutional layer
        num_nodes=128, # Number of LSTM nodes for each LSTM layer
        num_layers=3, # Number of LSTM layers
        num_classes=7, # Number of classes in final layer
        learning_rate=0.0001,
        gradient_clipping_norm=9.0,
        dropout=0.3)

    classifier = tf.estimator.Estimator(
        model_fn=my_model,
        config=config,
        params=params
    )

    return classifier

classifier = get_classifier(8)

train_spec = tf.estimator.TrainSpec(
    input_fn=lambda:input.batch_dataset("dataset/shape-train-???.tfrecords", tf.estimator.ModeKeys.TRAIN, 8),
    max_steps=100000
)

eval_spec = tf.estimator.EvalSpec(
    input_fn=lambda:input.batch_dataset("dataset/shape-eval-???.tfrecords", tf.estimator.ModeKeys.EVAL, 8)
)

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

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


person BenJacob    schedule 23.04.2018    source источник


Ответы (4)


Когда я устанавливаю save_checkpoints_steps, выполняется оценка после указанного количества шагов; Конфигурация:

tf.estimator.RunConfig(save_summary_steps=5, log_step_count_steps=3, save_checkpoints_steps=40)

дает оценку каждому 40 steps.

person MomoAG    schedule 08.01.2019

Вы можете установить max_steps на меньшее число, чтобы оценить раньше.

Это сбросит функцию ввода. В настоящее время нет возможности приостановить функцию ввода и возобновить ее в том же состоянии с помощью средства оценки. Мы рассматриваем возможность добавления этой функции.

person kww    schedule 23.04.2018
comment
Спасибо за ваш ответ, параметр max_steps завершает обучение, верно? Цикл обучения и оценки уже периодически оценивает, нельзя ли изменить частоту этого? - person BenJacob; 24.04.2018
comment
Вы можете увеличить значение, передаваемое в max_steps. Альтернативное решение (которое может быть ближе к тому, что вы ищете) заключается в том, чтобы набор обучающих данных завершался раньше, используя функцию .take(). - person kww; 25.04.2018

Я обнаружил, что в EvalSpec есть параметр `throttle_secs', который запускает этап оценки через несколько секунд. В качестве альтернативы, если вы хотите оценить на основе нескольких шагов, вы можете использовать цикл for и постепенно увеличивать max_steps, как это было предложено @Kathy Wu.

person BenJacob    schedule 25.04.2018

Вместо этого используйте tf.contrib.learn.Experiment.

Например:

experiment = tf.contrib.learn.Experiment(

    estimator=estimator,  # Estimator

    train_input_fn=train_input_fn,  # First-class function

    eval_input_fn=eval_input_fn,  # First-class function

    train_steps=params.train_steps,  # Minibatch steps

    min_eval_frequency=params.min_eval_frequency,  # Eval frequency

    train_monitors=[train_input_hook],  # Hooks for training

    eval_hooks=[eval_input_hook],  # Hooks for evaluation

    eval_steps=None  # Use evaluation feeder until its empty

)

learn_runner.run(

    experiment_fn=experiment,  # First-class function

    run_config=run_config,  # RunConfig

    schedule="train_and_evaluate",  # What to run

    hparams=params  # HParams

)
person LeckieNi    schedule 28.11.2018
comment
tf.contrib.learn.Experiment устарел. См.: tensorflow.org/api_docs/python/tf/contrib/learn/ Эксперимент Tensorflow рекомендует переключиться на tf.estimator.train_and_evaluate - person Hlynur Freyr Jónsson; 14.01.2019