Я впервые пытаюсь использовать 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()