Python反向传播隐藏层比率

时间:2015-01-07 08:19:33

标签: python neural-network

我正在尝试用Python创建一个Back传播网络。 我有14个输入功能和1个输出。我打算使用多层神经网络。

我有以下问题

1)i / p和隐藏层比率应该是多少?

我对隐藏图层计数感到困惑。

任何人都可以帮助我。

谢谢,

更新:

输入和我的标签

[[235, 2, -16.033171734306542, -828.0208534934904, 232965.81361002076, 2000.0, 11182359.053280996, 8565.232332709325, 4000.0, 0.019363246307941673, 1052153, 11313.47311827957, 105.79752842706958, 94],[10]],
[[-604, -6, 8.086235575302165, 380.8373042348658, 41190.53784866458, 2000.0, 1977145.8167358998, 420.30048579171057, 4000.0, 0.02123278230725872, 3436716, 36953.93548387097, 191.20880866382254, 94],[10]],
[[1825, 19, 14.022865897726179, -713.1319698367766, 97114.42605383566, 2000.0, 4661492.450584112, 1033.7486227812578, 4000.0, -0.019663774014977573, 3648687, 39233.1935483871, 197.01730672439965, 94],[10]],
[[-281, -2, -1.5372950205773066, 454.058413755312, 26895.611774858942, 2000.0, 1290989.3651932292, 765.2497914458995, 4000.0, -0.0033856767631790675, 5459685, 58706.290322580644, 241.00156704708152, 94],[10]],
[[1254, 13, 7.42946537169472, 236.81791472792207, 37351.8426913391, 2000.0, 1792888.4491842769, 923.863841127187, 4000.0, 0.03137205806507656, 5618776, 60416.94623655914, 244.48765360638856, 94],[10]],
[[55, 0, -6.799835826239174, -297.6057130887548, 7874.250847696101, 2000.0, 377964.04068941285, 66.64091494961357, 4000.0, 0.022848472079604405, 4150489, 44628.913978494624, 210.12886117302483, 94],[10]],
[[97, 1, 9.01187671470769, -55.32899089341877, 8218.299323445417, 2000.0, 394478.36752538, 127.66669905739745, 4000.0, -0.16287802414592073, 5331935, 57332.63440860215, 238.16530554628952, 94],[10]],
[[229, 2, 1.9250596458545362, -137.23162431944527, 16672.65593718128, 2000.0, 800287.4849847014, 130.52997477489504, 4000.0, -0.014027813599097374, 6905755, 74255.43010752689, 271.045159933551, 94],[10]],
[[107, 1, 6.470150940664045, 29.918507467688016, 26956.56324395225, 2000.0, 1293915.035709708, 165.12995290667556, 4000.0, 0.21625914820957587, 5269967, 56666.31182795699, 236.77727661962044, 94],[10]],
[[500, 5, 8.286114608469786, 122.0075128161886, 35446.863937609196, 2000.0, 1701449.4690052415, 253.11481415842877, 4000.0, 0.06791478997652628, 4669072, 50205.07526881721, 222.86986948307808, 94],[10]],
[[414, 4, 27.324467984592186, 485.55010485356297, 27500.260236682432, 2000.0, 1320012.4913607568, 214.55557670874316, 4000.0, 0.05627527975271053, 2489806, 26772.107526881722, 162.74918700976798, 94],[10]],
[[1044, 11, 4.238057309288552, -292.40132784218787, 8680.945668556162, 2000.0, 416685.3920906958, 475.7867593841577, 4000.0, -0.014493974225643315, 7271678, 78190.08602150538, 278.1335589168353, 94],[10]],
[[-528, -5, -10.252042152315722, 129.48476543188406, 20929.59991855366, 2000.0, 1004620.7960905757, 137.63411934477546, 4000.0, -0.07917566300653991, 7299292, 78487.01075268818, 278.6611608265341, 94],[10]]

    ]

1 个答案:

答案 0 :(得分:3)

所以要重新解决问题w / r / t的实际目标:你只需要一个整数值来表示构成隐藏层的神经元的数量,以便:

  • 你的求解器(渐变下降,共轭渐变等) 在训练期间收敛;以及

  • 总误差(例如,RMSE)低于您认为可以接受的某个阈值。

几乎可以肯定,有几个值可以满足这两个标准;更重要的是,你没有理由在训练期间手动调整这个值。

事实上,这是一种常见做法,通常称为修剪

哪些节点是修剪的候选者?那些与它们相关的重量值最小的那些 (rember,权重适用于节点之间的连接而不是节点本身)。如果它们是 接近零,那么你知道他们对结果几乎没有影响。 (一种常用的技术) 目视检查这些权重是 Hinton Diagram (在matplotlib的图库中有一个代码片段) 主页)。

特别考虑到后者,我建议首先选择一个略大于的整数 你的输入层。为什么?很明显,这些层的大小可以相等,或者您的网络不会 具有非线性,因此留下更多的神经元或更少(相对于输入层)。作为初步猜测 为了进行交互(即,在迭代过程中进行调整),前者是优选的,因为过量 容量将有助于您的网络融合,这就是您想要的。一旦收敛,然后向下调整 隐藏层中的节点数量,并通过这样做来查看对总误差的影响。

总之,在这种情况下,从16或18个神经元开始,观察迭代进度并相应地修剪。

如果您更喜欢经验较少的方法(即,其背后有一些数字证明并试图确定最佳网络规模事先而不是通过迭代和修剪),请参阅accepted answer(我的)提出了类似的问题。