我正在寻找一种方法来计算每层的层数和神经元数量。作为输入,我只有输入向量的大小,输出向量的大小和trainig集的大小。
通常,最好的网络是通过尝试不同的网络拓扑并选择具有最小误差的网络来确定的。不幸的是我做不到。
答案 0 :(得分:102)
这是一个非常难的问题。
网络内部结构越多,网络在表示复杂解决方案方面就越好。另一方面,太多的内部结构较慢,可能导致培训分歧,或导致过度拟合 - 这将阻止您的网络很好地推广到新数据。
人们传统上以几种不同的方式解决这个问题:
尝试不同的配置,看看效果最好。您可以将训练集分为两部分 - 一部分用于培训,一部分用于评估 - 然后训练和评估不同的方法。不幸的是,在您的情况下,这种实验方法不可用。
使用经验法则。很多人已经想出了什么最有效的猜测。关于隐藏层中神经元的数量,人们推测(例如)它应该(a)介于输入和输出层大小之间,(b)设置为接近(输入+输出)* 2/3,或者(c)绝不大于输入层大小的两倍。
经验法则的问题在于,他们并不总是考虑重要的信息,like how "difficult" the problem is, what the size of the training and testing sets等等。因此,这些规则是经常被用作“让我们尝试一堆事物,看得出作用最好”的方法的粗略起点。
使用动态调整网络配置的算法。 Cascade Correlation等算法从最小网络开始,然后在训练期间添加隐藏节点。这可以使您的实验设置更简单,并且(理论上)可以带来更好的性能(因为您不会意外地使用不适当数量的隐藏节点)。
关于这个主题有很多研究 - 所以如果你真的很感兴趣,还有很多东西需要阅读。查看引文on this summary,特别是:
Lawrence,S.,Giles,C.L。和Tsoi,A.C。(1996),"What size neural network gives optimal generalization? Convergence properties of backpropagation"。 技术报告UMIACS-TR-96-22和CS-TR-3617,马里兰大学帕克分校高级计算机研究所。
Elisseeff,A。和Paugam-Moisy,H。(1997),"Size of multilayer networks for exact learning: analytic approach"。 神经信息处理系统的进展9,剑桥,麻省:麻省理工学院出版社,pp.162-168。
答案 1 :(得分:43)
答案 2 :(得分:0)
我使用MLP作为商业软件,只有一个隐藏层只有一个节点。由于输入节点和输出节点是固定的,我只需要改变隐藏层的数量并发挥所实现的泛化作用。通过改变隐藏层的数量,我通过一个隐藏层和一个节点实现的目标从未真正发挥过很大的作用。我只使用了一个带有一个节点的隐藏层。它工作得很好,在我的软件前提下,减少计算也非常诱人。