【问题标题】:h2o deep learning different results per runh2o 深度学习每次运行的不同结果
【发布时间】:2017-11-04 11:13:28
【问题描述】:

我使用python的h2o深度学习对2个平衡类“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”类,他们有什么建议吗?

【问题讨论】:

  • 请移动“另外,所有的运行都给出了多数预测为“1”类而不是“0”类,他们有什么建议吗?”到一个单独的问题(并提供一个可重复的例子)。

标签: deep-learning h2o


【解决方案1】:

这个问题已经回答了here,但是你需要在Python中初始化H2ODeepLearningEstimator(或R中的h2o.deeplearning())时设置reproducible=TRUE

即使设置了reproducible=TRUE,H2O 深度学习的结果也只有在使用单核时才能重现;换句话说,当h2o.init(nthreads = 1)。其背后的原因在here 中进行了概述。

另外,根据 H2O 深度学习 user guide

每个 Mapper 任务是否在一个单独的神经网络模型上工作,该模型在归约期间组合在一起,还是每个 Mapper 都在操纵一个跨节点持久的共享对象?

都不是;每个计算节点有一个模型,所以有多个 映射器/线程共享一个模型,这就是 H2O 不可重现的原因 除非使用小数据集且 force_load_balance=F 或 reproducible=T,有效地重新平衡到单个块和 导致只有一个线程启动 map()。当前的行为是 简单的模型平均;通过“Elastic”进行节点间模型平均 平均”目前正在进行中。

【讨论】:

  • 谢谢。是的,当我设置 reproducible=TRUE 和 seed=1 时它可以工作。
  • 任何人都可以建议我如何让结果不偏向某个类,尽管这两个类在训练阶段是平衡的?
猜你喜欢
  • 2017-04-11
  • 2016-07-25
  • 1970-01-01
  • 2017-01-05
  • 2019-02-05
  • 2015-12-31
  • 1970-01-01
  • 2017-01-02
  • 2016-10-14
相关资源
最近更新 更多