我必须训练一个非常大的前馈神经网络来进行模式识别。
网络有10,000个输入神经元,200个输出神经元,隐藏层有5100个神经元。函数x/ (1 + abs(x))作为激活函数。
培训数据集的大小为10万。
问题是训练神经网络需要很长的时间,这使得神经网络的精细调整非常耗时。
我提出了两个改进培训成绩的可能办法:
还有更好的选择吗?我是安的新手,任何建议都很感激。
谢谢。
发布于 2014-05-24 09:31:54
在一个句子中-首先使用隐藏层的大小来查看什么大小适合您的需要。
我曾经为前馈反向传播编写了一个实现。网络的大小可能是唯一的因素,但也有etta (收敛因子)在反向传播阶段,和其他因素(我需要记住,但我保证尝试)。另外,你也有一些互相关联的技巧。此外,您还可以尝试优化分化代码和激活函数(小x可能会引入数值问题,并且有除法操作)。
我的策略是首先检查隐藏层--与10000个输入神经元相比,隐藏层中有5000个神经元是相当大的隐藏层(然而,这取决于问题)。需要计算的函数数量是主要的瓶颈--与隐藏层的大小成二次。如果隐藏层中的节点数为O(N),则要在外层和隐藏层之间执行的函数数为O(N^2)。这是因为输入层中的每个节点都需要贡献给隐藏层中的所有节点,输出层和隐藏层也是如此。
在我处理的问题-图像压缩,1/8,甚至1/16的输入神经元的大小满足我的需要。我强烈建议您首先测试隐藏层大小,以查看在隐藏层大小和结果质量之间的最佳权衡。
同样-前馈(和反向传播)可以以并行方式实现-考虑为此使用open。并行处理可以非常有效地实现每个节点权值的积累。
发布于 2014-05-24 08:17:48
在http://deeplearning.net/software/theano/抢劫一下。
它确实支持OpenCL,并且非常适合ANN,例如,下面是LeNet实现:http://deeplearning.net/tutorial/lenet.html
https://stackoverflow.com/questions/23826260
复制相似问题