Могут ли модели глубокого обучения H2O в R быть воспроизводимыми, оставаясь многопоточными? - PullRequest
0 голосов
/ 08 декабря 2018

Я работал над проверкой моделей, разработанных с использованием h2o.

В частности, я тестировал нейронную сеть, реализованную с использованием h2o.deeplearning.Я пытался получить согласованные результаты, устанавливая начальное значение в функции H2O, но даже делая это, я вижу коэффициенты корреляции между 0,6 и 0,85 между различными версиями одной и той же модели, даже с одинаковыми начальными значениями.

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

Кто-нибудь еще когда-либо должен был решать подобную проблему / нашел способ заставить воспроизводимые нейронные сети H2O с меньшим воздействием на производительность?

1 Ответ

0 голосов
/ 08 декабря 2018

Из технической записки по этой теме

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

Мотивация

H2OГлубокое обучение использует технику под названием HOGWILD !что значительно увеличивает скорость обучения, но не воспроизводится по умолчанию.

Решение

Чтобы получить воспроизводимые результаты, необходимо установить reproducible = TRUE и seed = 1 (например, но вы можете использовать любое семя, если вы используете одно и то же каждый раз).Если вы включите воспроизводимость, это замедлит обучение, потому что это работает только в одном потоке.По умолчанию кластеры H2O запускаются с тем же числом потоков, что и количество ядер (например, на ноутбуке обычно 8).

Пример R ниже демонстрирует, как создать воспроизводимые модели глубокого обучения:

library(h2o)
h2o.init(nthreads = -1)

# Import a sample binary outcome train/test set into R
train <- read.table("http://www.stat.berkeley.edu/~ledell/data/higgs_10k.csv", sep=",")
test <- read.table("http://www.stat.berkeley.edu/~ledell/data/higgs_test_5k.csv", sep=",")


# Convert R data.frames into H2O parsed data objects
training_frame <- as.h2o(train)
validation_frame <- as.h2o(test)
y <- "V1"
x <- setdiff(names(training_frame), y)
family <- "binomial"
training_frame[,c(y)] <- as.factor(training_frame[,c(y)])  #Force Binary classification
validation_frame[,c(y)] <- as.factor(validation_frame[,c(y)])

Теперь мы подгоним две модели и покажем, что тренировочный AUC оба раза одинаков (т.е. воспроизводим).

fit <- h2o.deeplearning(x = x, y = y, 
                            training_frame = training_frame, 
                            reproducible = TRUE, 
                            seed = 1)
h2o.auc(fit)
#[1] 0.8715931

fit2 <- h2o.deeplearning(x = x, y = y, 
                            training_frame = training_frame, 
                            reproducible = TRUE, 
                            seed = 1)
h2o.auc(fit2)
#[1] 0.8715931
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...