神经网络例子

神经网络

1. 单层感知器

数据分类 输出为0和1

解决线性可分的分类模型

例1.从待分类的数据中取出一部分数据及其对应的类别作为样本数据,设计并训练一个能对分类数据进行分类的单层感知器神经网络 代码:

%给定训练样本数据 P=[-.4 -.5 .6;.9 0 .1];

%给定样本数据所对应的类别,用0和1来表示两种类别 T=[1 1 0];

%创建一个有两个输入、样本数据的取值范围都在[-1 1]之间,并且网络只有一个神经元的感知器神经网络

net=newp([-1 1;-1 1],1);

%设置网络的最大训练次数为20次 net.trainParam.epochs=20;

%使用训练函数对创建的网络进行训练 net=train(net,P,T);

%对训练后的网络进行仿真 Y=sim(net,P)

%计算网络的平均绝对误差,表示网络错误分类 E1=mae(Y-T)

%给定测试数据,检测训练好的神经网络的性能 Q=[0.6 0.9 -0.1;-0.1 -0.5 0.5];

%使用测试数据,对网络进行仿真,仿真输出即为分类的结果 Y1=sim(net,Q)

%创建一个新的绘图窗口 figure;

%在坐标中绘制测试数据点,并根据数据所对应的类别用约定的符号画出 plotpv(Q,Y1);

%在坐标中绘制分类线 plotpc(net.iw{1},net.b{1}) 2. 线性神经网络模型

线性神经网络类似感知器,但是线性神经网络的激活函数是线性的,而不是硬线转移函数,因此,线性神经网络的输出可以是任意值,而感知器的输出不是0就是1,线性神经网络网络和感知器一样只能解决线性可分的问题.

例2.要求设计一个线性神经网络,寻找给定数据之间的线性关系 代码:

P=[1.1 -1.3]; T=[0.6 1];

%创建一个只有一个输出,输入延迟为0,学习速率为0.01的线性神经网络,minmax(P)表示样本数据的取值范围

net=newlin(minmax(P),1,0,0.01);

%对创建的神经网络进行初始化,设置权值和阈值的初始值 net=init(net);

net.trainParam.epochs=500;

%设置网络训练后的目标误差为0.0001 net.trainParam.goal=0.0001; net=train(net,P,T); y=sim(net,P)

%求解网络的均方误差值 E=mse(y-T)

3. BP神经网络

预测

能逼近任意非线性函数

例3.表2-4为某药品的销售情况,现构建一个如下的BP神经网络对药品的销售进行预测:输入层为三个结点,隐含层结点数为5,隐含层的激活函数为tansig(双曲正切S型传递函数);输出层结点数为1,输出层的激活函数为logsig(S型的对数函数),并利用此网络对药品的销售量进行预测,预测的方法采用滚动预测方式,即用前三个月的销售量来预测第四个月的销售量,如用1、2、3月的销售量为输入预测第4个月的销售量,用2、3、4月的销售量为输入预测第5个月的销售量。如此反复直至满足预测精度要求为止。 1 2 3 4 5 6 月份 销量 月份 2056 7 2395 8 2600 9 2298 10 1500 1634 11 2046 1600 12 1556 1873 1478 1900 销量 212 241 263 ; 241 263 236 ; 263 236 161 ; 236 161 168 ; 161 168 187 ; 168 187 148 ; 187 148 193; 148 193 157 205 156; ]

代码:

%以每三个月的销售量经归一化处理后作为输入 P=[0.5152 0.8173 1.000; 0.8173 1.000 0.7308; 1.000 0.7308 0.1390; 0.7308 0.1390 0.1087; 0.1390 0.1087 0.3520; 0.1087 0.3520 0.000]’;

%以第四个月的销售量归一化处理后作为目标向量 T=[0.7308 0.1390 0.1087 0.3520 0.000 0.3761];

%创建一个BP神经网络,每一个输入向量的取值范围为[0,1],隐含层为5个神经元,输出层有一个神经元,隐含层的激活函数为tansig,输出层的激活函数为logsig,训练函数为梯度下降函数

net=newff([0 1; 0 1; 0 1],[5 1],{‘tansig’,’logsig’},’traingd’); net.trainParam.epochs=15000; net.trainParam.goal=0.01; %设置学习速率为0.1 LP.lr=0.1;

net=train(net,P,T) 4. RBF神经网络

属于前向神经网络,能够以任意精度逼近任意连续函数,特别适合于解决分类问题

例4.建立一个径向基神经网络,对非线性函数y=sqrt(x)进行逼近,并作出网络的逼近误差曲线 代码:

%输入从0开始变化到5,每次变化幅度为0.1 x=0:0.1:5; y=sqrt(x);

%建立一个目标误差为0,径向基函数的分布密度为0.5,隐含层神经元个数的最大值为20,每增加5个神经元显示一次结果 net=newrb(x,y,0,0.5,20,5); t=sim(net,x);

%在以输入x和函数值与网络输出之间的差值y-t坐标上绘出误差曲线,并用“*”来标记函数值与输出值之间的差值 plot(x,y-t,’*-’)

5. 自组织竞争神经网络

属于前向神经网络,特别适合于解决模式分类和识别方面的问题

例5.人口分类是人口统计中的重要指标,现有1999年共10个地区的人口出生比例情况如下:

出生男性百分比分别为:0.5512 0.5123 0.5087 0.5001 0.6012 0.5298 0.5000 0.4965 0.5103 0.5003;

出生女性百分比分别为:0.4488 0.4877 0.4913 0.4999 0.3988 0.4702 0.5000 0.5035 0.4897 0.4997;

建立一个自组织神经网络对上述数据分类,给定某个地区的男女出生比例分别为:0.5,0.5,测试训练以后的自组织神经网络的性能,判断其属于哪个类别. 代码:

P=[0.5512 0.5123 0.5087 0.5001 0.6012 0.5298 0.5000 0.4965 0.5103 0.5003; 0.4488 0.4877 0.4913 0.4999 0.3988 0.4702 0.5000 0.5035 0.4897 0.4997];

%创建一个自组织神经网络,[0 1;0 1]表示输入数据的取值范围在[0 1]之间,[3 4]表示竞争层组织结构为3×4,其余参数取默认值 net=newsom([0 1;0 1], [3 4]); net.trainParam.epochs=500; net=init(net); net=train(net,P); y=sim(net,P);

%获取训练后的自组织神经网络的权值

w1=net.IW{1,1};

%绘出训练后自组织神经网络的权值分布图 plotsom(w1,net.layers{1}.distances); %输入测试数据 p=[0.5;0.5];

%对网络进行测试 y_test=sim(net,p);

%将测试数据所得到的单值向量变换成下标向量 y_test=vec2ind(y_test)

6. 学习向量量化(LVQ)神经网络

属于前向神经网络,在模式识别和优化领域有着广泛应用

例6.针对一组输入向量,设计一个LVQ神经网络,经过训练后,能对给定的数据进行模式识别. 代码:

%输入向量P及其对应的类别向量C

P=[-6 -4 -2 0 0 0 0 2 4 6;0 2 -2 1 2 -2 1 2 -2 0]; C=[1 1 1 2 2 2 2 1 1 1];

%将类别向量C转换为目标向量T T=ind2vec(C); %绘制输入向量P,用颜色将输入向量分为两类 Plotvec(P,C,’*r’) ; axis([-8 8 -3 3])

%创建一个LVQ神经网络,隐含层有5个神经元,[0.6 0.4]表示在隐含层的权值中,有60%的列的第一行的值是1,40%的列的第一行值为1,也就是说60%的列属于第一类,40%属于第二类,网络的其他参数取默认值 net=newlvq(minmax(P),5,[0.6 0.4]); net.trainParam.epoches=100; net=train(net,P,T);

%给定数据,输出网络的分类结果测试网络的性能 p=[0 1;0.2 0]; y=sim(net,p); yc=vec2ind(y)

%对给定数据,一个归为第二类,一个归为第一类

yc =

2 1 7. Elman神经网络

反馈神经网络,他是一种有非线性元件构成的反馈系统,其稳定状态的分析比属于前向神经网络要复杂得多

可解决旅行商问题(TSP)

例7.下表为某单位办公室七天上午9点到12点的空调负荷数据,数据已经做了归一化处理,预测方法采用前6天数据作为网络的训练样本,每3天的负荷数据作为输入向量,第4天的负荷作为目标向量,第7天的数据作为网络的测试数据

空调负荷数据表 时间 第1天 第2天 第3天 第4天 第5天 第6天 第7天 9时负荷 0.4413 0.4379 0.4517 0.4557 0.4601 0.4612 0.4615 10时负荷 0.4707 0.4677 0.4725 0.4790 0.4811 0.4845 0.4891 11时负荷 0.6953 0.6981 0.7006 0.7019 0.7101 0.7188 0.7201 12时负荷 0.8133 0.8002 0.8201 0.8211 0.8298 0.8312 0.8330 代码:

%根据预测方法得到输入向量和目标向量

P=[0.4413 0.4707 0.6953 0.8133 0.4379 0.4677 0.6981 0.8002 0.4517 0.4725 0.7006 0.8201; 0.4379 0.4677 0.6981 0.8002 0.4517 0.4725 0.7006 0.8201 0.4557 0.4790 0.7019 0.8211; 0.4517 0.4725 0.7006 0.8201 0.4557 0.4790 0.7019 0.8211 0.4601 0.4811 0.7101 0.8298 ]'; T=[0.4557 0.4790 0.7019 0.8211;0.4601 0.4811 0.7101 0.8298;0.4612 0.4845 0.7188 0.8312]';

%输入向量的取值范围为[0 1],用threshold来标记

threshold=[0 1; 0 1; 0 1; 0 1; 0 1; 0 1; 0 1; 0 1; 0 1; 0 1; 0 1; 0 1];

%创建一个Elman神经网络,隐含层的神经元的个数为17个,4个输出层神经元,隐含层激活函数为tansig,输出层激活函数为purelin net=newelm(threshold,[17,4],{'tansig','purelin'}); net.trainParam.epoches=3000; net=init(net); net=train(net,P,T); %输入测试数据

P_test=[0.4557 0.4790 0.7019 0.8211 0.4601 0.4811 0.7101 0.8298 0.4612 0.4845 0.7188 0.8312]';

T_test=[0.4615 0.4891 0.7201 0.8330]'; y=sim(net,P_test)

%在测试数据下,计算网络的输出和实际目标向量之间的差值 Error=y-T_test;

%在坐标平面上画出差值曲线 Plot(1:4,error,'-')

8. 基于遗传算法的BP神经网络

BP神经网络是人工神经网络中应用最广泛的

缺陷:学习收敛速度太慢;不能保证收敛到全局最小点;网络结构不易确定

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4