神经网络例子之欧阳学文创编.docx
《神经网络例子之欧阳学文创编.docx》由会员分享,可在线阅读,更多相关《神经网络例子之欧阳学文创编.docx(7页珍藏版)》请在冰豆网上搜索。
神经网络例子之欧阳学文创编
神经网络
1.
欧阳光明(2021.03.07)
2.单层感知器数据分类输出为0和1解决线性可分的分类模型例1.从待分类的数据中取出一部分数据及其对应的类别作为样本数据,设计并训练一个能对分类数据进行分类的单层感知器神经网络
代码:
%给定训练样本数据P=[-.4-.5.6;.90.1];%给定样本数据所对应的类别,用0和1来表示两种类别T=[110];%创建一个有两个输入、样本数据的取值范围都在[-11]之间,并且网络只有一个神经元的感知器神经网络net=newp([-11;-11],1);
%设置网络的最大训练次数为20次
net.trainParam.epochs=20;
%使用训练函数对创建的网络进行训练
net=train(net,P,T);
%对训练后的网络进行仿真
Y=sim(net,P)
%计算网络的平均绝对误差,表示网络错误分类
E1=mae(Y-T)
%给定测试数据,检测训练好的神经网络的性能
Q=[0.60.9-0.1;-0.1-0.50.5];
%使用测试数据,对网络进行仿真,仿真输出即为分类的结果
Y1=sim(net,Q)
%创建一个新的绘图窗口
figure;
%在坐标中绘制测试数据点,并根据数据所对应的类别用约定的符号画出
plotpv(Q,Y1);
%在坐标中绘制分类线
plotpc(net.iw{1},net.b{1})
3.线性神经网络模型线性神经网络类似感知器,但是线性神经网络的激活函数是线性的,而不是硬线转移函数,因此,线性神经网络的输出可以是任意值,而感知器的输出不是0就是1,线性神经网络网络和感知器一样只能解决线性可分的问题.
例2.要求设计一个线性神经网络,寻找给定数据之间的线性关系
代码:
P=[1.1-1.3];
T=[0.61];
%创建一个只有一个输出,输入延迟为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)
4.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
2395
2600
2298
1634
1600
月份
7
8
9
10
11
12
销量
1873
1478
1900
1500
2046
1556
212241 263 ;
241 263236;
263236161 ;
236161168 ;
161168 187 ;
168 187 148 ;
187 148193;
148193157205 156; ]
代码:
%以每三个月的销售量经归一化处理后作为输入
P=[0.51520.81731.000;
0.81731.0000.7308;
1.0000.73080.1390;
0.73080.13900.1087;
0.13900.10870.3520;
0.10870.35200.000]’;
%以第四个月的销售量归一化处理后作为目标向量
T=[0.73080.13900.10870.35200.0000.3761];
%创建一个BP神经网络,每一个输入向量的取值范围为[0,1],隐含层为5个神经元,输出层有一个神经元,隐含层的激活函数为tansig,输出层的激活函数为logsig,训练函数为梯度下降函数
net=newff([01;01;01],[51],{‘tansig’,’logsig’},’traingd’);
net.trainParam.epochs=15000;
net.trainParam.goal=0.01;
%设置学习速率为0.1
LP.lr=0.1;
net=train(net,P,T)
5.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,’*-’)
6.自组织竞争神经网络
属于前向神经网络,特别适合于解决模式分类和识别方面的问题
例5.人口分类是人口统计中的重要指标,现有1999年共10个地区的人口出生比例情况如下:
出生男性百分比分别为:
0.55120.51230.50870.50010.60120.52980.50000.49650.51030.5003;
出生女性百分比分别为:
0.44880.48770.49130.49990.39880.47020.50000.50350.48970.4997;
建立一个自组织神经网络对上述数据分类,给定某个地区的男女出生比例分别为:
0.5,0.5,测试训练以后的自组织神经网络的性能,判断其属于哪个类别.
代码:
P=[0.55120.51230.50870.50010.60120.52980.50000.49650.51030.5003;0.44880.48770.49130.49990.39880.47020.50000.50350.48970.4997];
%创建一个自组织神经网络,[01;01]表示输入数据的取值范围在[01]之间,[34]表示竞争层组织结构为3×4,其余参数取默认值
net=newsom([01;01],[34]);
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)
7.学习向量量化(LVQ)神经网络
属于前向神经网络,在模式识别和优化领域有着广泛应用
例6.针对一组输入向量,设计一个LVQ神经网络,经过训练后,能对给定的数据进行模式识别.
代码:
%输入向量P及其对应的类别向量C
P=[-6-4-20000246;02-212-212-20];
C=[1112222111];
%将类别向量C转换为目标向量T
T=ind2vec(C);
%绘制输入向量P,用颜色将输入向量分为两类
Plotvec(P,C,’*r’);
axis([-88-33])
%创建一个LVQ神经网络,隐含层有5个神经元,[0.60.4]表示在隐含层的权值中,有60%的列的第一行的值是1,40%的列的第一行值为1,也就是说60%的列属于第一类,40%属于第二类,网络的其他参数取默认值
net=newlvq(minmax(P),5,[0.60.4]);
net.trainParam.epoches=100;
net=train(net,P,T);
%给定数据,输出网络的分类结果测试网络的性能
p=[01;0.20];
y=sim(net,p);
yc=vec2ind(y)
%对给定数据,一个归为第二类,一个归为第一类
yc=
21
8.Elman神经网络
反馈神经网络,他是一种有非线性元件构成的反馈系统,其稳定状态的分析比属于前向神经网络要复杂得多
可解决旅行商问题(TSP)
例7.下表为某单位办公室七天上午9点到12点的空调负荷数据,数据已经做了归一化处理,预测方法采用前6天数据作为网络的训练样本,每3天的负荷数据作为输入向量,第4天的负荷作为目标向量,第7天的数据作为网络的测试数据
空调负荷数据表
时间
9时负荷
10时负荷
11时负荷
12时负荷
第1天
0.4413
0.4707
0.6953
0.8133
第2天
0.4379
0.4677
0.6981
0.8002
第3天
0.4517
0.4725
0.7006
0.8201
第4天
0.4557
0.4790
0.7019
0.8211
第5天
0.4601
0.4811
0.7101
0.8298
第6天
0.4612
0.4845
0.7188
0.8312
第7天
0.4615
0.4891
0.7201
0.8330
代码:
%根据预测方法得到输入向量和目标向量
P=[0.44130.47070.69530.81330.43790.46770.69810.80020.45170.47250.70060.8201;0.43790.46770.69810.80020.45170.47250.70060.82010.45570.47900.70190.8211;0.45170.47250.70060.82010.45570.47900.70190.82110.46010.48110.71010.8298]';
T=[0.45570.47900.70190.8211;0.46010.48110.71010.8298;0.46120.48450.71880.8312]';
%输入向量的取值范围为[01],用threshold来标记
threshold=[01;01;01;01;01;01;01;01;01;01;01;01];
%创建一个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.45570.47900.70190.82110.46010.48110.71010.82980.46120.48450.71880.8312]';
T_test=[0.46150.48910.72010.8330]';
y=sim(net,P_test)
%在测试数据下,计算网络的输出和实际目标向量之间的差值
Error=y-T_test;
%在坐标平面上画出差值曲线
Plot(1:
4,error,'-')
9.基于遗传算法的BP神经网络
BP神经网络是人工神经网络中应用最广泛的
缺陷:
学习收敛速度太慢;不能保证收敛到全局最小点;网络结构不易确定