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)
Last modification:August 22nd, 2019 at 03:09 pm
如果觉得我的文章对你有用,请随意赞赏