matlab神经网络
常用函数介绍
newff:创建一个BP网络,其调用格式为:
net=newff(PR,[S1 S2 ... SN1],{TF1 TF2 ... TFN1},BTF,BLF,PF)
其中的解释:
net=newff:用于在对话框中创建一个BP网络
PR:由每组输入(共有R组输入)元素的最大值和最小值组成的R*2维的矩阵;
Si:第i层的长度,共计N1层
TFi:第i层的传递函数,默认是“tansig”
BTF:BP网络的训练函数,默认为“trainlm”
BLF:权值和阈值的BP学习算法,默认为“learngdm”
PF:网络的性能函数,默认为“mse”
train 用于对神经网络进行训练,调用格式:
[net,tr,Y,E,Pf,Af]=train(NET,P,T,Pi,Ai)
其中
NET:待训练的神经网络
P:网络的输入信号
T:网络的目标,默认值为0
Pi:初始的输入延迟,默认为0
Ai:初始的层次延迟,默认为0
net:函数返回值,训练后的神经网络
tr:函数返回值,训练记录(包括步数和性能)
Y:函数返回值,神经网络的输出信号
E:函数返回值,神经网络的误差
Pf:函数返回值,最终输入延迟
Af:函数返回值,最终层延迟
仿真函数sim,调用格式为:
[Y,Pf,Af,E,perf]=sim(net,P,Pi,Ai,T)
其中
Y:函数返回值,网络输出
Pf:函数返回值,最终输出延迟
Af:函数返回值,最终的层延迟
E:函数返回值,网络误差
perf:函数返回值,网络性能
net:待仿真的神经网络
P:网络输入
Pi:初始输入延迟,默认为0
Ai:初始的层延迟,默认为0
T:网络目标,默认为0
net = newlvq(PR,S1,PC,LR,LF)
net为生成的学习向量量化网络;
PR为一个Rx2维的网络输入向量取值范围的矩阵[Pmin Pmax];
Sl表示隐含层神经元的数目;
PC表示在第二层的权值中列所属类别的百分比;
LR表示学习速率,默认值为0.01;
Lf表示学习函数,默认值为learnlv1。
例子: 蠓虫分类问题与多层前馈网络
蠓虫分类问题
2.1 蠓虫分类问题蠓虫分类问题
可概括叙述如下:生物学家试图对两种蠓虫( Af 与 Apf)进行鉴别,依据的资料是触角和翅膀的长度,已经测得了 9 支 Af 和 6 支 Apf 的数据如下:
Af: (1.24,1.27) , (1.36,1.74) , (1.38,1.64) , (1.38,1.82) , (1.38,1.90) , (1.40,1.70) ,
(1.48,1.82), (1.54,1.82), (1.56,2.08).
Apf: (1.14,1.82), (1.18,1.96), (1.20,1.86), (1.26,2.00), (1.28,2.00), (1.30,1.96).
现在的问题是:
(1)根据如上资料,如何制定一种方法,正确地区分两类蠓虫。
(2)对触角和翼长分别为(1.24,1.80), (1.28,1.84)与(1.40,2.04)的 3 个标本,用所得到的方法加以识别。
(3)设 Af 是宝贵的传粉益虫, Apf 是某疾病的载体,是否应该修改分类方法。如上的问题是有代表性的,它的特点是要求依据已知资料( 9 支 Af 的数据和 6 支Apf 的数据)制定一种分类方法,类别是已经给定的( Af 或 Apf)。今后,我们将 9 支Af 及 6 支 Apf 的数据集合称之为学习样本。
matlab程序
程序设计如下:
clear %清除数据
p1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;
1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08]; %9支Af数据
p2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00
1.28,2.00;1.30,1.96];%6支Apf数据
p=[p1;p2]'; %形成矩阵并且转置
pr=minmax(p); %找到最小与最大值
goal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)];%goal是训练数据p的标准输出结果,也即是目标矩阵,1表示一类,0表示第二类
plot(p1(:,1),p1(:,2),'h',p2(:,1),p2(:,2),'o') %标志出数据
net=newff(pr,[3,2],{'logsig','logsig'}); %创建 一个bp 神经网络:pr输入,第一层长度为3,第二层长度为2,两层的传递函数都是逻辑回归函数,其他均为默认
net.trainParam.show = 10;%显示训练迭代过程,运算10次显示一下
net.trainParam.lr = 0.05; %学习速率0.05
net.trainParam.goal = 1e-10;%训练精度
net.trainParam.epochs = 50000;%最大训练次数
net = train(net,p,goal);%训练,分类结果0或者是1
x=[1.24 1.80;1.28 1.84;1.40 2.04]'; %给出一个示例数据再进行仿真
y0=sim(net,p) %对网络进行仿真,并输出仿真结果
y=sim(net,x) %示例数据的仿真
用lvq方法(向量量子化方法)
clear
p1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;
1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08];
p2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00
1.28,2.00;1.30,1.96];
p=[p1;p2]'
pr=minmax(p) %求出极大极小值
goal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)]%goal是训练数据p的标准输出结果
net = newlvq(pr,4,[0.6,0.4]) %lvq神经网络,4个隐含层,第二层中所属类别百分比给出
net = train(net,p,goal) %训练,得到一个黑箱网络
Y = sim(net,p) %仿真
x=[1.24 1.80;1.28 1.84;1.40 2.04]'
sim(net,x)