Настройка гиперпараметров для Tensorflow

Я ищу пакет настройки гиперпараметров для кода, написанного непосредственно в Tensorflow (а не в Keras или Tflearn). Не могли бы вы сделать какое-нибудь предложение?


person Mark    schedule 25.05.2017    source источник
comment
github.com/cerlymarco/keras-hypetune   -  person Marco Cerliani    schedule 02.10.2020


Ответы (6)


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

  • hyperopt реализует случайный поиск и оптимизацию оценщиков дерева парзенов.
  • Scikit-Optimize реализует несколько других, включая байесовскую оптимизацию гауссовского процесса.
  • SigOpt - удобный сервис (платный, но с бесплатным уровнем и дополнительными надбавками для студентов и исследователей) для оптимизации гиперпараметров. Он основан на MOE Yelp с открытым исходным кодом (хотя опубликованная версия, похоже, не сильно обновляется ) и теоретически может использоваться сам по себе, хотя для этого потребуются дополнительные усилия.
  • Spearmint - это тоже часто упоминаемый пакет, также с открытым исходным кодом, но не бесплатный для коммерческих целей (хотя вы можете вернуться на более старую версию с меньшими ограничениями). Он выглядит неплохо, но не очень активно, а доступная версия несовместима с Python 3 (хотя для исправления этого были отправлены запросы на вытягивание).
  • BayesOpt кажется золотым стандартом байесовской оптимизации, но в основном это C ++, а интерфейс Python - нет. выглядят очень задокументированными.

Из них я только действительно (то есть с реальной проблемой) использовал hyperopt с TensorFlow, и это не потребовало особых усилий. API в некоторых точках выглядит немного странно, а документация не очень тщательна, но он действительно работает и, похоже, находится в активной разработке, и, возможно, появятся дополнительные алгоритмы оптимизации и адаптации (например, специально для нейронных сетей). Однако, как было предложено в ранее связанном сообщении блога, Scikit-Optimize, вероятно, так же хорош, а SigOpt выглядит довольно простым в использовании, если он вам подходит.

person jdehesa    schedule 25.05.2017
comment
Я новичок в этой DNN. но я выполнил поиск по сетке параметров с помощью scikit-learn (традиционный ML). Мой вопрос: поиск по сетке в DNN требует слишком большой вычислительной мощности, практично ли это? - person scott huang; 17.09.2017
comment
@scotthuang Взгляните на этот документ . Помимо описания нескольких других методов, одним из выводов является то, что даже случайный поиск может быть более эффективным, поскольку часто только небольшое подмножество гиперпараметров играет значительную роль в производительности модели. - person jdehesa; 17.09.2017

Я хотел бы добавить еще одну библиотеку в список @ jdehesa, которую я применил в своих исследованиях, в частности, с tenorflow. Это гипер-движок с лицензией Apache 2.0.

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

person Maxim    schedule 17.09.2017

Вы можете попробовать Ray Tune, простую библиотеку для масштабирования поиска по гиперпараметрам. Я в основном использую его для обучения модели Tensorflow, но он не зависит от фреймворка - без проблем работает с PyTorch, Keras и т. Д. Вот страница документации - ray.readthedocs.io/en/latest/tune.html

Вы можете использовать его для запуска распределенных версий современных алгоритмов, таких как HyperBand или байесовская оптимизация примерно в 10 строках кода.

В качестве примера одновременного выполнения 4 параллельных вычислений:

import ray
import ray.tune as tune
from ray.tune.hyperband import HyperBandScheduler


def train_model(config, reporter):  # add the reporter parameter
    model = build_tf_model(config["alpha"], config["beta"])
    loss = some_loss_function(model)
    optimizer = tf.AdamOptimizer(loss)

    for i in range(20):
        optimizer.step()
        stats = get_statistics()
        reporter(timesteps_total=i, 
                 mean_accuracy=stats["accuracy"])

ray.init(num_cpus=4)
tune.run(train_model,
    name="my_experiment",
    stop={"mean_accuracy": 100}, 
    config={ 
        "alpha": tune.grid_search([0.2, 0.4, 0.6]), 
        "beta": tune.grid_search([1, 2]) 
    },
    scheduler=HyperBandScheduler(reward_attr="mean_accuracy"))

Вам также не нужно изменять свой код, если вы хотите запустить этот сценарий в кластере.

Отказ от ответственности: я работаю над этим проектом - дайте мне знать, если у вас есть отзывы!

person richliaw    schedule 04.04.2018
comment
Одна вещь, которую я не смог понять, глядя на примеры Ray Tune: как мне получить обученный объект model после вызова tune.run_experiments(...)? - person Karl; 15.03.2019
comment
используйте 1_. А потом analysis.get_best_config. - person richliaw; 14.08.2019

Я не уверен, что это также те параметры, которые вам нужны, но вы упомянули гиперпараметры TensorFlow, поэтому я думаю, что могу предложить некоторые.

Попробуйте клонировать этот репозиторий, чтобы получить нужные скрипты;

git clone https://github.com/googlecodelabs/tensorflow-for-poets-2 < / а>

и в папке Master вызовите командную строку и запустите эту строку;

python -m scripts.retrain -h

чтобы получить список необязательных аргументов.

Источник: https://codelabs.developers.google.com/codelabs/tensorflow-for-poets/#6

person Infinite Loops    schedule 23.08.2018

Я обнаружил, что sci-kit optimize очень прост в использовании для байесовской оптимизации гиперметров, и он работает с любым API тензорного потока (оценщик, настраиваемый оценщик, ядро, keras и т. Д.)

https://stackoverflow.com/a/53582472/2218905

person Jason    schedule 02.12.2018

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

person emmanuel    schedule 14.03.2019