Из технической записки по этой теме
Почему результаты глубокого обучения не воспроизводятся:
Мотивация
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