如何在Matlab中改进神经网络中的数字识别预测?

时间:2016-05-30 14:23:12

标签: matlab neural-network classification

我使用神经网络进行了数字识别(56x56位),但我在测试集上获得了89.5%的准确率,在训练集中获得了100%的准确率。我知道使用此训练集可以在测试集上获得> 95%。有没有办法改善我的训练,以便我能得到更好的预测?将迭代次数从300更改为1000,我的准确率为+ 0.12%。我的文件大小也受到限制,因此增加节点数是不可能的,但如果是这样的话,我可能会从输入层剪切一些像素/节点。

训练我使用:

  • 输入图层:3136个节点
  • 隐藏层:220个节点
  • 标签:36
  • lambda = 0.1
  • 的正则化成本函数
  • fmincg计算权重(1000次迭代)

1 个答案:

答案 0 :(得分:1)

正如评论中所提到的,最简单和最有希望的方法是切换到卷积神经网络。但是对于您当前的模型,您可以:

  • 添加更多层,每层神经元越少,这会增加学习能力,并且应该稍微提高准确度。问题是你可能会开始过度拟合。使用正则化来解决这个问题。

  • 使用batch Normalization(BN)。虽然您已经在使用正则化,但BN可以加速训练并进行正则化,并且是一种可能更好的NN特定算法。

  • 制作合奏。在同一数据集上训练几个NN,但具有不同的初始化。这会产生稍微不同的分类器,您可以将它们的输出结合起来,以提高准确度。

  • 交叉熵损失。你没有提到你正在使用什么损失函数,如果它不是交叉熵,那么你应该开始使用它。所有高精度分类器都使用交叉熵损失。

  • 切换到反向传播和随机梯度下降。我不知道使用不同优化算法的效果,但反向传播可能胜过您当前使用的优化算法,您可以将其与其他优化器(如Adagrad或ADAM)结合使用。

  • 其他可能提高准确性的微小变化是改变激活功能(如ReLU),在每个纪元后改变训练样本,并进行数据增强。