1引言
什么叫人工神经网络?经典定义:神经网络是由具有适应性的简单单元组成的广泛并行互连网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应”[Kohonen,1988]。但是这种比较高端的说法在一段时间里让我无法理解为什么神经网络能够起作用。比如在使用最小二乘法将数据拟合直线的时候,需要使用某种方法将实际值和预测值之间的偏差尽可能小。其实BP神经网络也就是做了类似的事情——使偏差尽可能小。
2 BP神经网络
2.1原理与模型结构
分析BP神经网络的基本原理:通过输入向量与权向量加权求和,得到一个下层神经元的输入,再加上偏置,经过激活函数计算,作下层神经元的输出。
图1
这种网络不仅有输入节点、输出节点,而且还有一层或多层隐含节点。其同感知器和自适应线形元件的主要差别在激活函数上。BP网络的激活函数必须是处处可微的,所以它就不能够采用二值型的阀值函数{0,1},或者是符号函数{-1,1}。BP网络通常使用的是S型的对数或者是正切激活函数和线形函数。
对于S型函数,也即sigmoid函数,是一个连续可微的函数,其一阶导数存在。对于多层网络,这种激活函数所划分的区域不再是线形划分,而是由一个非线性的超平面组成的区域。它是比较柔和、光滑的任意平面,因而它的分类比线形划分精确、合理,而且这种网络的容错性也比较好。另外一个重要的特点就是由于激活函数是连续可微的,它可以严格的用梯度法进行推算,它的权值修正的解析式非常明确,其算法被称为误差反向传播法,简称BP算法,这种网络也称为BP网络。
3 数据介绍
MNIST的下载链接:http://yann.lecun.com/exdb/mnist/。
MNIST是一个包含数字0~9的手写体图片数据集,图片已归一化为以手写数字为中心的28*28规格的图片。
MNIST由训练集与测试集两个部分组成,各部分规模如下:
(1)训练集:60,000个手写体图片及对应标签 ;
(2)测试集:10,000个手写体图片及对应标签。
4 测试收集结果
将测试集运用前向传递算法算出预测值,与实际期望预测值进行对比。由于神经网络训练过程中随机生成权值,每次训练的结果具有随机性,因此重复文收集结果。设置三层神经元,隐含层包含10个神经元,进行N次迭代,测试的准确率如下:
取平均值结果为:0.8889。
5 手写测试
经过上述MINST数据集的训练,我们来自己手写一个数字进行测试,适当修改代码即可。我们可以通过MINST数据集的特点,使用PhotoShop工具来制作28×28像素的图片:
可以看出来比较模糊,因为只有784个像素点。然后通过Mtalab来对它做一下处理,相关代码如下:
I = imread(\’test1.jpg\’);
figure,imshow(I);
G = rgb2gray(I);
[m,n] = size(G);
for x = 1:m
for y = 1:n
G(x,y) = 255-G(x,y);
end
end
G(G==1) = 0;
G = double(G);
imshow(G);
save G.mat;
处理之后的图片是这样的:
已经与MINST数据集的图片相同,接下来我们就可以对它进行一次测试。测试结果如下:
附主要代码: