您的位置:首页 > 理论基础 > 计算机网络

神经网络:简单手写数字识别神经网络

2016-12-01 23:16 831 查看

问题



如上,是一个手写数字序列,要识别这个序列,我们可以分成两部分:1.先把一个一个数字分割开来;2.逐个识别数字。

在我们人类看来,这项工作是简单的,但是对于计算机而言,是个复杂问题。

我们不妨把我们的注意力集中在第二个问题:识别单个数字。

解决方案



(这是一张“简略”的图,它省略了input layer上的部分neurons)

上图是解决问题的神经网络模型,它是一个三层神经网络。对于这样的神经网络,我们要解决问题,必须要有训练集来训练它。

我们所用到的训练集:大量28x28像素的图片(这些图片通过扫描一些手写数字得到),这些输入的像素是灰度级的,0.0代表白色,1.0代表黑色,介于两者之间为灰色。

由训练集可知,我们的input layer应该有28x28=784个neurons,上图简略了一些。

第二层是hidden layer,我们设置它的neurons有n个,上图中n=15

第三层是output layer,它有10个neurons(因为数字无非就是0~9),并且我们假定,如果第一个neuron被激活,ouput=1,那么就说是被到的数字为0,以此类推。(这个时候大家可能会问,要是多个neurons被激活呢?原文中说要取最大值的那个,但是如果有两个最大值,或者有两个以上最大值呢?)

一个问题

为什么输出层要用到10个neurons呢?直接采取二进制编码表示,用4个neurons就足够了。然而,实验证明,用10个比用4个更好,但是为什么?是什么实验证明?或者说用什么实验证明?

一种解释(我持怀疑态度)

到底hidden neurons是怎么工作的呢?可以这样设定:把一张图片分成几个部分。hidden layer的第一个neuron负责下面部分的检查:



而第二个,第三个,第四个neuron负责下面几个部分:



通过这四个neurons,就可以得出结论:



这个时候就激活第一个output neuron。(当然,这只是其中一种方法)

而如果采用二进制编码,当第一个neurons工作时,就要思考它所代表的二进制位

小结

上述离神经网络的应用还有有点差距,毕竟看起来更像启发式,而不是前面几个小结介绍的神经网络那种方法(例如与或非的实现)。对于4位编码的方法,也许存在一些学习算法可以更简单地解决问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐