Перечисление набора данных (epoch и batchSize) при реализации оптимизации гиперпараметров Ray.Tune PBT - PullRequest
0 голосов
/ 04 октября 2019

Я впервые пытаюсь использовать Ray.Tune для оптимизации гиперпараметров. Меня смущает, где в коде Ray я должен инициализировать набор данных, а также куда поместить циклы for для определения эпохи и перечисления пакетов набора данных.

Фон

В моемОбычный учебный сценарий, я выполняю несколько шагов:
1. Разобрать параметры модели,
2. Инициализировать набор данных,
3. Создать и инициализировать модель,
4. Цикл For для прохождения поэпохи,
5. Вложенный цикл for для перечисления пакетов набора данных

В документации Ray.Tune говорится, что при определении объекта класса Trainable мне действительно нужны только _setup, _train, _save и _restore,Насколько я понимаю, функция _train () предназначена для одной итерации и автоматически увеличивает уровень обучения. Учитывая, что dataset_size не может быть чисто делим на batchSize, я вычисляю total_steps по ходу обучения. Если я правильно понимаю, мои total_steps не будут равны training_iteration. Это важно, поскольку предполагается, что число шагов используется для определения того, когда оценивать работника.

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

Оригинальный код train.py

self.opt = TrainOptions().parse()
data_loader = CreateDataLoader(self.opt)
self.dataset = data_loader.load_data()
self.dataset_size = len(data_loader)

total_steps = 0
counter = 0
for epoch in range(self.opt.starting_epoch, self.opt.niter + self.opt.niter_decay + 1):
    for i, data in enumerate(self.dataset):
        total_steps += self.opt.batchSize if i<len(self.dataset) else (self.dataset_size * (epoch + 1)) - total_steps
        counter += 1
        self.model.set_input(data, self.opt)
        self.model.optimizeD()
        if counter % self.opt.critic_iters == 0:
            self.model.optimizeG()

1 Ответ

0 голосов
/ 12 октября 2019

training_iteration - это просто логическая единица обучения. Не было бы проблемой использовать одну эпоху для "training_iteration".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...