0

我目前正在研究 MNIST 手写数字分类。

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

  • 输入: 28x28 = 784 个输入
  • 隐藏层:具​​有 1000 个神经元的单个隐藏层
  • 输出层: 10 个神经元

所有的神经元都具有Sigmoid激活函数。

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

我的问题是:

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

我问一下,因为目前网络卡在 ~75% 的成功率上。由于实际上“10 个分类器”共享隐藏层的相同神经元——我不确定——它是否会降低网络学习能力?

** 编辑: **

由于其他人可能会参考这个线程,我想说实话并更新 75% 的成功率是在大约 1500 个 epoch 之后。现在我经过了近 3000 个 epoch 并且成功率约为 85% - 所以效果很好

4

2 回答 2

2

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

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

如果您确实尝试不同的网络结构,通常最好从较少数量的层和神经元开始,然后增加复杂性。这不仅减少了训练时间,而且还避免了立即过度拟合数据(你没有提到你的准确性是针对训练集还是验证集)。

于 2015-06-05T18:01:06.310 回答
1

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

于 2015-06-05T18:45:37.650 回答