Как использовать hparams с оценщиками?

Чтобы регистрировать hparams без использования Keras, Я делаю следующее, как это предлагается в коде tf здесь:

with tf.summary.create_file_writer(model_dir).as_default():
    hp_learning_rate = hp.HParam("learning_rate", hp.RealInterval(0.00001, 0.1))
    hp_distance_margin = hp.HParam("distance_margin", hp.RealInterval(0.1, 1.0))
    hparams_list = [
        hp_learning_rate,
        hp_distance_margin
    ]
    metrics_to_monitor = [
        hp.Metric("metrics_standalone/auc", group="validation"),
        hp.Metric("loss", group="train", display_name="training loss"),
    ]
    hp.hparams_config(hparams=hparams_list, metrics=metrics_to_monitor)
    hparams = {
        hp_learning_rate: params.learning_rate,
        hp_distance_margin: params.distance_margin,
    }
    hp.hparams(hparams)

Обратите внимание, что params — это объект словаря, который я передам оценщику.

Затем я тренирую оценщика как обычно,

config = tf.estimator.RunConfig(model_dir=params.model_dir)
estimator = tf.estimator.Estimator(model_fn, params=params, config=config)
train_spec = tf.estimator.TrainSpec(...)
eval_spec = tf.estimator.EvalSpec(...)

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

После обучения, когда я запускаю tensorboard, у меня регистрируются hparams, но я не вижу никаких зарегистрированных для них метрик.

введите описание изображения здесь

Я также подтвердил, что они отображаются на странице scalars с одним и тем же именем тега как для обучения, так и для проверки, то есть . и ./eval, но страница hparams не видит эти зарегистрированные тензоры.

Как использовать hparams с оценщиками?


я использую

tensorboard              2.1.0
tensorflow               2.1.0
tensorflow-estimator     2.1.0
tensorflow-metadata      0.15.2

on Python 3.7.5


Попытка 1:

После некоторого поиска в Google я увидел более старый код tf, в котором они передавали аргумент Estimator от hparams до params, поэтому просто чтобы убедиться, что tf2 регистрирует эти hparams сам по себе, когда они заданы, я проверил Estimator, и в нем говорится:

Аргумент params содержит гиперпараметры. Он передается в model_fn, если model_fn имеет параметр с именем "params", и во входные функции таким же образом. Estimator только передает параметры, но не проверяет их. Таким образом, структура params полностью зависит от разработчика.

Поэтому использование hparams в качестве параметров не будет полезным.


Попытка 2:

Я сомневаюсь, что, поскольку оценщики используют tensorflow.python.summary вместо tf.summary, который используется по умолчанию в v2, тензоры, зарегистрированные v1, вероятно, были недоступны, и поэтому я также пытался использовать

with tensorflow.python.summary.FileWriter(model_dir).as_default()

Однако это не удалось с RuntimeError: tf.summary.FileWriter is not compatible with eager execution. Use tf.contrib.summary instead.

Обновление: я запустил его с отключенным жадным выполнением. Теперь даже первоначального логирования hparam не произошло. В тензорной доске не было вкладки hparams, так как она вышла из строя с ошибкой

E0129 13:03:07.656290 21584 hparams_plugin.py:104] HParams error: Can't find an HParams-plugin experiment data in the log directory. Note that it takes some time to scan the log directory; if you just started Tensorboard it could be that we haven't finished scanning it yet. Consider trying again in a few seconds.

Есть ли способ заставить tensorboard читать уже зарегистрированные метрические тензоры и связать их с hparams?


person Saravanabalagi Ramachandran    schedule 29.01.2020    source источник


Ответы (1)


Виновник, похоже,

# This doesn't seem to compatible with Estimator API
hp.hparams_config(hparams=hparams_list, metrics=metrics_to_monitor)

Простой вызов hparams регистрирует все метрики, зарегистрированные с помощью tf.summary. Затем в tensorboard вы можете отфильтровать только нужные вам метрики, а затем сравнить испытания.

with tf.summary.create_file_writer(train_folder).as_default():
    # params is a dict which contains
    # { 'learning_rate': 0.001, 'distance_margin': 0.5,...}
    hp.hparams(hparams=params))

person Saravanabalagi Ramachandran    schedule 03.02.2020
comment
Привет. Как вы используете интервалы в hparams? Например, вы пытались использовать hp_learning_rate = hp.HParam("learning_rate", hp.RealInterval(0.00001, 0.1)) в исходном вопросе, но в итоге использовали # { 'learning_rate': 0.001, 'distance_margin': 0.5,...} в своем комментарии. Как вы указываете интервалы, чтобы найти лучшее значение? - person Xavier Silva; 23.07.2020