Neural network MNIST-培训陷入困境

Neural network MNIST-培训陷入困境,neural-network,artificial-intelligence,backpropagation,mnist,feed-forward,Neural Network,Artificial Intelligence,Backpropagation,Mnist,Feed Forward,我正在阅读(前两章),我正试图跟随并构建我自己的ANN来对MNIST数据集的数字进行分类 我已经挠头好几天了,因为我的实现在10个纪元之后达到了峰值,在对测试集(约5734/10000)中的数字进行分类时,准确率达到了约57%(训练集的准确率在第十个纪元之后停滞不前,测试集的准确率可能因为过度拟合而下降) 我使用的配置与书中几乎相同:2层前馈神经网络(784-30-10),所有层完全连接;标准sigmoid激活函数;二次成本函数;权重的初始化方式相同(取自平均值为0、标准偏差为1的高斯分布) 唯

我正在阅读(前两章),我正试图跟随并构建我自己的ANN来对MNIST数据集的数字进行分类

我已经挠头好几天了,因为我的实现在10个纪元之后达到了峰值,在对测试集(约5734/10000)中的数字进行分类时,准确率达到了约57%(训练集的准确率在第十个纪元之后停滞不前,测试集的准确率可能因为过度拟合而下降)

我使用的配置与书中几乎相同:2层前馈神经网络(784-30-10),所有层完全连接;标准sigmoid激活函数;二次成本函数;权重的初始化方式相同(取自平均值为0、标准偏差为1的高斯分布) 唯一的区别是,我使用在线培训而不是批量/小批量培训,学习率为1.0而不是3.0(我尝试过小批量培训+学习率为3.0)

然而,我的实现并没有在一系列时代之后通过60%的百分位数,就像书中所说的那样,ANN在第一个时代之后以几乎完全相同的配置超过了90%。 起初我把反向传播算法的实现搞砸了,但在以不同的方式重新实现了三次反向传播后,每次重新实现的结果都完全相同,我被难倒了

反向传播算法产生的结果示例:

采用与上述配置相同的简单前馈网络(在线训练+学习率1.0):3个输入神经元、2个隐藏神经元和1个输出神经元

初始权重初始化如下:

Layer #0 (3 neurons)

Layer #1 (2 neurons)
  - Neuron #1: weights=[0.1, 0.15, 0.2] bias=0.25
  - Neuron #2: weights=[0.3, 0.35, 0.4] bias=0.45

Layer #2 (1 neuron)
  - Neuron #1: weights=[0.5, 0.55] bias=0.6
如果输入为[0.0,0.5,1.0],则输出为0.78900331。 对于相同的输入和1.0的期望输出,反向传播得到以下偏导数(dw=导数wrt权重,db=导数wrt偏差):

用这些偏导数更新网络得到的修正输出值为0.74862305


如果有人愿意证实上述结果,这将对我帮助很大,因为我已经排除了反向传播是错误的问题的原因

有谁在解决MNIST问题时遇到过这个问题吗? 即使是关于我应该检查的东西的建议也会有所帮助,因为我在这里真的迷路了。

Doh

结果证明我的反向传播实现没有问题

问题是,我将图像读入一个有符号字符(在C++中)数组,像素值溢出,因此当我除以255.0将输入向量规格化为0.0-1.0范围时,实际上得到了负值…;-

所以基本上我花了大约四天的时间调试和重新实现相同的东西,而问题完全出在其他地方

Layer #0 (3 neurons)

Layer #1 (2 neurons)
  - Neuron #1: dw=[0, 0.0066968054, 0.013393611] db=0.013393611
  - Neuron #2: dw=[0, 0.0061298212, 0.012259642] db=0.012259642

Layer #2 (1 neuron)
  - Neuron #1: dw=[0.072069918, 0.084415339] db=0.11470326