FeedForward神经网络:为多个类使用具有多个输出神经元的单个网络

时间:2015-06-05 16:13:19

标签: machine-learning neural-network backpropagation feed-forward

我目前正致力于MNIST手写数字分类。

我构建了一个具有以下结构的FeedForward网络:

  • 输入: 28x28 = 784输入
  • 隐藏层:包含1000个神经元的单个隐藏层
  • 输出图层: 10个神经元

所有神经元都具有 Sigmoid 激活功能。

报告的类是与输出神经元对应的具有最大输出值的类

我的问题是:

  • 创建具有多个输出的单个网络是一种好方法吗?即我应该为每个数字创建一个单独的网络吗?

我问这个问题,因为目前网络仍然坚持了~75%的成功率。作为实际的" 10分类器"分享隐藏层的相同神经元 - 我不确定 - 它是否会降低网络学习能力?

**编辑:**

由于其他人可能会参考这个帖子,我想说实话并更新75%的成功率是在大约1500个时期之后。现在我已经接近3000个时代了,它的成功率约为85% - 所以效果很好

2 个答案:

答案 0 :(得分:2)

简而言之,是的,使用具有多个输出的单个网络是一种很好的方法。第一个隐藏层描述了特征空间中的决策边界(超平面),多个数字可以从一些相同的超平面中受益。虽然您可以为每个数字创建一个ANN,但这种一对一的方法并不一定能产生更好的结果,并且需要训练10倍的人工神经网络(每个人都可以多次训练以避免局部最小值) 。如果你有数百或数千个数字,那么它可能更有意义。

单个隐藏层中的1000个神经元对于这个问题似乎很多。我认为通过减少该数字并添加第二个隐藏层,您可能会获得更好的手写数字结果。这样可以在输入要素空间中对更复杂的组合边界进行建模。例如,也许尝试784x20x20x10网络。

如果您尝试使用不同的网络结构,通常最好从较少数量的层开始。神经元然后增加复杂性。这不仅可以减少培训时间,还可以避免过度拟合数据(您没有提到您的准确性是否适用于培训或验证集)。

答案 1 :(得分:1)

是的,您肯定可以使用具有多个输出的单个网络。不需要创建单独的网络,您的方法绝不会降低网络学习能力。 MNIST是一个适合深度学习的手写数据库。因此,如果您使用深度学习算法,添加多个图层是一个很好的解决方案。否则,建议使用简单的基于BPN的模型添加多个图层,因为您将遇到本地最小值。您可以在Theano上查找深度学习教程。 话虽如此,你可以尝试简单的逻辑回归" deeplearning.net/tutorial/logreg.html"它达到了相当高的准确度。