2016-11-27 2 views
0

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

args <- list(list(hidden = c(200,200,200), 
        loss = "CrossEntropy", 
        hidden_dropout_ratio = c(0.1, 0.1,0.1), 
        activation = "RectifierWithDropout", 
        epochs = EPOCHS)) 

run <- function(extra_params) { 
    model <- do.call(h2o.deeplearning, 
        modifyList(list(x = columns, y = c("Response"), 
        validation_frame = validation, distribution = "multinomial", 
        l1 = 1e-5,balance_classes = TRUE, 
        training_frame = training), extra_params)) 
} 

model <- lapply(args, run) 

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

+1

Так вы установили ** постоянное случайное семя **? – sascha

+0

Я использовал set.seed вместо того, чтобы использовать его как атрибут :(Спасибо за указатель –

ответ

3

Недостаток использования H2O не будет воспроизводимым, если он работает на более чем одном сердечнике. Результаты и показатели производительности могут незначительно отличаться от того, что вы видите каждый раз, когда тренируете модель глубокого обучения. Реализация в H2O использует технику под названием «Hogwild!». что увеличивает скорость обучения за счет воспроизводимости на нескольких ядрах.

Так что, если вы хотите воспроизводимых результатов, вам нужно будет ограничить H2O для работы на одном сердечнике и не забудьте использовать seed в вызове h2o.deeplearning.

Редактировать основанный на комментарий Даррена Кук: Я забыл включить параметр reproducible = TRUE, который должен быть установлен в комбинации с seed, чтобы сделать его действительно воспроизводимым. Обратите внимание, что это значительно ускорит работу. И не рекомендуется делать это с помощью большого набора данных.

Более подробная информация о "Hogwild!"

+1

Просто установка 'seed' не будет работать. С глубоким обучением вы также должны установить' воспроизводимый = TRUE'. Этот последний аргумент - это то, что заставляет его для запуска на одном ядре. –

+0

@ DarrenCook, Забыл о той части. – phiver

Смежные вопросы