多次运行 h2o 深度学习的一致结果

Consisten results with Multiple runs of h2o deeplearning

对于h2o的深度学习函数中的某个参数组合,我每次运行都会得到不同的结果。

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) 

我需要做什么才能在每次 运行 时获得一致的模型结果?

如果在多个内核上 运行 使用 H2O 进行深度学习将无法重现。结果和性能指标可能与您每次训练深度学习模型时看到的略有不同。 H2O 中的实现使用了一种称为 "Hogwild!" 的技术,它以牺牲多核的可重复性为代价提高了训练速度。

因此,如果您想要可重现的结果,您需要将单核上的 H2O 限制为 运行,并确保在 h2o.deeplearning 调用中使用 seed

根据 Darren Cook 的评论编辑: 我忘记包含需要与 seed 结合设置的 reproducible = TRUE 参数,以使其真正可重现。请注意,这会使 运行 变慢很多。并且不建议对大型数据集执行此操作。

有关 "Hogwild!"

的更多信息