【问题标题】:h2o deep learning weights and normalizationh2o 深度学习权重和归一化
【发布时间】:2016-10-14 08:48:11
【问题描述】:

我正在通过 R 界面探索 h2o,我得到了一个奇怪的权重矩阵。我的任务很简单:给定 x,y 计算 x+y。
我有 214 行 3 列。第一列 (x) 从 (-1000, 1000) 均匀绘制,第二列 (y) 从 (-100,100) 均匀绘制。我只想将它们组合起来,所以我有一个带有单个神经元的隐藏层。 这是我的代码:

library(h2o)
localH2O = h2o.init(ip = "localhost", port = 54321, startH2O = TRUE)
train <- h2o.importFile(path = "/home/martin/projects/R NN Addition/addition.csv")
model <- h2o.deeplearning(1:2,3,train, hidden = c(1), epochs=200, export_weights_and_biases=T, nfolds=5)
print(h2o.weights(model,1))
print(h2o.weights(model,2))

结果是

> print(h2o.weights(model,1))
          x          y
1 0.5586579 0.05518193

[1 row x 2 columns] 
> print(h2o.weights(model,2))
        C1
1 1.802469

由于某种原因,y 的权重值比 x 低 0.055 - 10 倍。因此,最终神经网络将计算 x+y/10。但是,h2o.predict 实际上会返回正确的值(即使在测试集上也是如此)。
我猜有一个预处理步骤可以以某种方式缩放我的数据。有什么办法可以重现模型产生的实际重量?我希望能够可视化一些非常简单的神经网络。

【问题讨论】:

    标签: r neural-network deep-learning h2o


    【解决方案1】:

    神经网络如果所有输入功能都具有均值@ 987654321和标准偏差1。如果特征具有截然不同的标准偏差,则神经网络表现得非常差。因为它的h20这是你的正常化。换句话说,在训练你的网络之前,它会计算你拥有的所有特征的平均值和标准差,并用(x - mean) / stddev 替换原始值。在您的案例中,第二个功能的stddev 987654325 @的@ 987654325比第一特征小于第一个,因此在归一化之后,值最终在它们对总和的贡献方式中的贡献数量更为重要,并且重量向隐藏的神经元转向需要取消它。这就是为什么第二个功能的重量较小为10倍。

    【讨论】:

      猜你喜欢
      • 2016-07-25
      • 1970-01-01
      • 2018-11-05
      • 2015-12-31
      • 1970-01-01
      • 2019-08-12
      • 2017-01-02
      • 1970-01-01
      • 2020-06-30
      相关资源
      最近更新 更多