简单的三层神经网络
上一篇是手动编写了一个感知机,对手写数字的数据集进行识别训练。趁热打铁,手动编写了一个三层的简单神经网络再次对手写数字的数据集进行识别训练,来看看最后的识别率能够达到什么程度。有兴趣的可以从这里下载上一次的感知机代码和数据集(收费是自动设置的,好像没有办法更改……有积分就直接下载吧,哈哈)
优快云下载链接
再附上一个百度云盘链接:
百度云盘链接
提取码:zd0h
和上一次的感知机相比,三层神经网络多了一层的隐藏层,所以我们重新的设计一下各层的激活函数,以及重新推导一下反向传播的推导公式。
设置各层的激活函数
从输入层到隐藏层的激活函数设置为sigmoid函数(不要问我为什么,对于这个函数情有独钟,可能和从高中就喜欢生物学有关吧,看见它就好像看见了生物中的神经元激活的样子……),隐藏层到输出层的激活函数我设置为softmax函数。因为最后的结果是统计每一种数字的可能性,加一层softmax函数可以将最后的数字的可能性作归一化处理,用百分数的形式表示每一个数字的可能性,最后选出可能性最大的数字。
正向的推导如下图所示(手写方便……),并对误差函数进行设置:
反向传播的推导
话不多说,直接上公式推导的图片: