首页 文章

h2o深度学习权重和规范化

提问于
浏览
1

我得到了一个奇怪的权重矩阵 . 我的任务很简单:给定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实际上返回正确的值(即使在测试集上) .
我'm guessing there'是一个预处理步骤,它以某种方式扩展我的数据 . 有什么方法可以重现模型产生的实际重量吗?我希望能够想象一些非常简单的神经网络 .

1 回答

  • 3

    如果所有输入要素具有均值 0 和标准差 1 ,则神经网络的性能最佳 . 如果特征具有非常不同的标准偏差,则神经网络执行得非常差 . 因为 h20 为你做了这种规范化 . 换句话说,在训练你的网之前,它会计算你拥有的所有特征的平均值和标准偏差,并用 (x - mean) / stddev 替换原始值 . 在你的情况下,第二个特征的 stddev 比第一个特征小10倍,因此在归一化之后,这些值在它们对总和的贡献程度方面最终变得重要10倍,并且前往隐藏神经元的权重需要取消它 . 这就是为什么第二个功能的重量要小10倍 .

相关问题