我在2个平衡类的数据上使用python进行h2o深度学习" 0"和" 1",并将参数调整为如下:
prostate_dl = H2ODeepLearningEstimator(
activation=,"Tanh"
hidden=[50,50,50],
distribution="multinomial",
score_interval=10,
epochs=1000,
input_dropout_ratio=0.2
,adaptive_rate=True
, rho=0.998, epsilon = 1e-8
)
prostate_dl .train(
x=x,
y=y,
training_frame =train,
validation_frame = test)
每次程序运行都会给出不同的混淆矩阵和精确度的结果,无论如何可以解释一下?结果如何可靠?
此外,所有的运行都将多数预测作为类" 1"不是" 0" ,他们有什么建议吗?
答案 0 :(得分:1)
此问题已得到解答here,但您需要在初始化Python中的reproducible=TRUE
(或R中的H2ODeepLearningEstimator
)时设置h2o.deeplearning()
。
即使在设置reproducible=TRUE
之后,H2O深度学习结果仅在使用单核时才可重现;换言之,h2o.init(nthreads = 1)
时。其背后的原因概述为here。
另外,根据H2O深度学习user guide:
每个Mapper任务是否在一个单独的神经网络模型上工作,该模型在缩减期间组合在一起,或者每个Mapper是否操纵一个跨节点持久的共享对象?
既不;每个计算节点有一个模型,所以多个 映射器/线程共享一个模型,这就是H2O不可重现的原因 除非使用小数据集且force_load_balance = F或 reproducible = T,有效地重新平衡到一个块和 导致只有一个线程来启动map()。目前的行为是 简单模型平均;通过“弹性”进行节点间模型平均 平均“目前正在进行中。