назначение num_samples в пакете Tune of Ray для оптимизации гиперпраметра

Я пытаюсь выполнить задачу оптимизации гиперпараметров для LSTM (чистый Tensorflow) с помощью Tune . Я последовал их примеру в алгоритме hyperopt. В этом примере они использовали строку ниже внутри раздела «config».

"num_samples": 10, если args.smoke_test еще 1000,

Документация не объясняет, что это такое. Я могу определить, является ли это полезным фрагментом кода или как я должен изменить это для своего сценария. Так что будет здорово, если я смогу узнать значение этой строки кода.

Пример кода hyperopt можно найти через this ссылка


person Suleka_28    schedule 01.01.2019    source источник
comment
это называется тернарным выражением - оно устанавливает для переменной "num_samples" значение 10 или 1000 в зависимости от некоторой другой заданной переменной. Судя по названиям, я бы предположил, что он отбирает некоторые данные в 10 или 1000 точках, чтобы создать то, что он делает ... вам нужно будет просмотреть документацию, чтобы убедиться в этом сам. "num_samples" предоставляется как параметр kwargs. Может быть где-то здесь: ray.readthedocs.io/en/latest/   -  person Patrick Artner    schedule 01.01.2019


Ответы (2)


Вы можете найти параметр в документации из run_experiments.

По умолчанию каждая случайная переменная и точка поиска по сетке выбираются один раз. Чтобы взять несколько случайных выборок, добавьте num_samples: N в конфигурацию эксперимента. Если grid_search указан в качестве аргумента, сетка будет повторяться num_samples раз.

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

Однако в вашем демонстрационном коде используется run_experiment:

config = {
    "my_exp": {
        "run": "exp",
        "num_samples": 10 if args.smoke_test else 1000,
        "config": {
            "iterations": 100,
        },
        "stop": {
            "timesteps_total": 100
        },
    }
}
algo = HyperOptSearch(space, max_concurrent=4, reward_attr="neg_mean_loss")
scheduler = AsyncHyperBandScheduler(reward_attr="neg_mean_loss")
run_experiments(config, search_alg=algo, scheduler=scheduler)  # here the config is passed
person Patrick Artner    schedule 01.01.2019
comment
Спасибо, есть идеи, что должен делать args.smoke_test? - person Suleka_28; 01.01.2019
comment
args.smoke_test - это просто логическое значение, которое мы используем, чтобы упростить выполнение тестов. Вы можете просто рассматривать строку как "num_samples": 10. - person richliaw; 11.01.2019
comment
@Sul 10 if args.smoke_test else 1000, - это тернарное выражение, которое говорит, что если args.smoke_test истинно, используйте 10 else 1000 - думайте об этом как о маленьком и большом сценарии тестирования, основанном на некотором вводе. Подсказка: если вы поставите @ перед именем пользователя, он автоматически дополнит его, если этот человек был внутри этого ответа / запроса и что более важно человек получает сообщение о том, что кто-то что-то обвинил - каким-то образом ваш комментарий ускользнул от меня: ) - person Patrick Artner; 11.01.2019

Согласно документации:

num_samples (int) - Количество выборок из пространства гиперпараметров. По умолчанию 1. Если grid_search указан в качестве аргумента, сетка будет повторяться num_samples раз.

Подстановка повтора:

repeat (int) - устарело и будет удалено в будущих версиях Ray. Вместо этого используйте num_samples

Использование:

"num_samples": 10

num_samples=10

class ray.tune.Experiment(name,run,stop=None,config=None,trial_resources=None,
repeat=1,num_samples=1,local_dir=None,upload_dir=None,checkpoint_freq=0,
checkpoint_at_end=False,max_failures=3,restore=None)
person Sonal Borkar    schedule 01.01.2019