首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >训练一个很大的神经网络

训练一个很大的神经网络
EN

Stack Overflow用户
提问于 2014-05-23 10:00:20
回答 2查看 2.1K关注 0票数 0

我必须训练一个非常大的前馈神经网络来进行模式识别。

网络有10,000个输入神经元,200个输出神经元,隐藏层有5100个神经元。函数x/ (1 + abs(x))作为激活函数。

培训数据集的大小为10万。

问题是训练神经网络需要很长的时间,这使得神经网络的精细调整非常耗时。

我提出了两个改进培训成绩的可能办法:

  • 将隐藏层的大小缩小到500到1000之间。这将大大减少所需的乘法运算数。然而,我不确定这样的减少是否会损害识别的准确性。
  • 得到一个高性能的矩阵乘法库(甚至引入OpenCL/CUDA),目前只实现了简单的矩阵乘法,这比一个经过仔细调整的矩阵乘法要慢。

还有更好的选择吗?我是安的新手,任何建议都很感激。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-24 09:31:54

在一个句子中-首先使用隐藏层的大小来查看什么大小适合您的需要

我曾经为前馈反向传播编写了一个实现。网络的大小可能是唯一的因素,但也有etta (收敛因子)在反向传播阶段,和其他因素(我需要记住,但我保证尝试)。另外,你也有一些互相关联的技巧。此外,您还可以尝试优化分化代码和激活函数(小x可能会引入数值问题,并且有除法操作)。

我的策略是首先检查隐藏层--与10000个输入神经元相比,隐藏层中有5000个神经元是相当大的隐藏层(然而,这取决于问题)。需要计算的函数数量是主要的瓶颈--与隐藏层的大小成二次。如果隐藏层中的节点数为O(N),则要在外层和隐藏层之间执行的函数数为O(N^2)。这是因为输入层中的每个节点都需要贡献给隐藏层中的所有节点,输出层和隐藏层也是如此。

在我处理的问题-图像压缩,1/8,甚至1/16的输入神经元的大小满足我的需要。我强烈建议您首先测试隐藏层大小,以查看在隐藏层大小和结果质量之间的最佳权衡。

同样-前馈(和反向传播)可以以并行方式实现-考虑为此使用open。并行处理可以非常有效地实现每个节点权值的积累。

票数 2
EN

Stack Overflow用户

发布于 2014-05-24 08:17:48

http://deeplearning.net/software/theano/抢劫一下。

它确实支持OpenCL,并且非常适合ANN,例如,下面是LeNet实现:http://deeplearning.net/tutorial/lenet.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23826260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档