1) cascadeforwardnet函数
cascadeforwardnet(hiddenSizes,trainFcn)
其中参数hiddenSizes为隐含层神经元节点的个数,如果有多个隐含层,则hiddenSizes是一个行向量,默认值为10;参数trainFcn为训练函数(默认值为trainlm)。
2) feedforwardnet(hiddenSizes,trainFcn)
3) newff函数
4) newcf函数
1) logsig函数
A = logsig(N,FP):N为SxQ维的网络输入(列)向量,FP为性能参数
dA_dN = logsig(‘dn’,N,A,FP)
返回A关于N的导数dA_dN,如果A或FP没有给出,则FP返回默认参数
2) tansig函数
3) purelin函数
该函数为线性传递函数
1) learngd函数
2) learngdm函数
1) trainbfg函数
准牛顿BP算法
2) traingd函数
该函数为负梯度下降BP算法函数
3) traindm函数
该函数为负梯度下降动量BP算法函数
perf = msereg(E,Y,X,FP)
参数E表示误差矩阵或向量(E=T-Y,T表示网络的目标向量);Y为网络的输出向量;X为所有权值和阈值的向量;FP表示性能参数;返回参数perf为平均绝对误差
1) plotperf函数
用于绘制一个单独神经元的额误差曲面
plotperf(tr,goal,name,epoch)
其中tr为网络训练记录;参数goal为性能目标,默认值为NaN;参数name为训练函数名称,默认为空;参数epoch为训练步数,默认训练记录的长度。
2) errsurf函数
errsurf(P,T,WV,BV,F)
P为输入行向量,T为目标行向量;WV为权值列向量;BV为阈值列向量;F为函数名字
3) plotes函数
plotes(WV,BV,ES,V)
其中,参数WV为权值的N维列向量;参数BV为M维的阈值行向量;参数ES为误差向量组成的MxN维矩阵;参数V为视角,默认为[-37.5,30]
4) plotep函数
H = plotep(W,B,E)
参数W为当前权值;参数B为当前阈值;参数E为当前神经元的输入误差
p=[1 2;-1 1;-2 1;-4 0]';
t=[0.2 0.8 0.8 0.2];
net=newff([-1 1;-1 1],[5 1],{'logsig','logsig'},'traingd');
net.trainParam.goal = 0.001;
net.trainParam.epochs = 5000;
[net,tr]=train(net,p,t);
iw1=net.iw{1}
ib1=net.b{1}
iw2=net.iw{2}
ib2=net.b{2}
save li3_27 net;
load li3_27 net;
p1=[1 2;-1 1;-2 1;-4 0]';
a2=sim(net,p1)
disp('输出分类结果为:')
a2=a2>0.5
clear all;
[alphabet,targets]=prprob;
[R,Q]=size(alphabet);
[S2,Q]=size(targets);
S1=10;
P=alphabet;
net=newff(minmax(P),[S1 S2],{'logsig','logsig'},'traingdx');
net.LW{2,1}=net.LW{2,1}*0.01;
net.b{2}=net.b{2}+0.01;
% 无噪声训练
T=targets;
net.performFcn='sse';
net.trainParam.goal=0.1;
net.trainParam.show=20;
net.trainParam.epochs=5000;
net.trainParam.mc=0.95;
[net,tr]=train(net,P,T);
% 有噪声训练
netn=net;
netn.trainParam.goal=0.6;
netn.trainParam.epochs=300;
T=[targets targets targets targets];
for pass=1:10
P=[alphabet,alphabet,(alphabet+rand(R,Q)*0.1),(alphabet+randn(R,Q)*0.2)];
[netn,tr]=train(netn,P,T);
end
% 再次进行无噪声训练,为了使得网络得到理想信号
netn.trainParam.goal=0.1;
netn.trainParam.epochs=5000;
netn.trainParam.show=5;
P=alphabet;
T=targets;
% [net,tr]=train(netn,P,T);
% 系统性能
noise_range=0:0.05:0.5;
max_test=100;
network1=[];
network2=[];
T=targets;
for noiselevel=noise_range
errors1=0;
errors2=0;
for i=1:max_test
P=alphabet+randn(35,26)*noiselevel;
A=sim(net,P);
AA=compet(A);
errors1=errors1+sum(sum(abs(AA-T)))/2;
An=sim(netn,P);
AAn=compet(An);
errors2=errors2+sum(sum(abs(AA-T)))/2;
end
network1=[network1 errors1/26/100];
network2=[network2 errors2/26/100];
end
plot(noise_range,network1*100,'--',noise_range,network2*100);
xlabel('噪声指标');
ylabel('无噪声训练 -- 有噪声训练 ---');
legend('无噪声训练网络','有噪声训练');
% 对训练的网络进行仿真
noisyA=alphabet(:,1)+randn(35,1)*0.2;
figure;
plotchar(noisyA);
A2=sim(net,noisyA);
A2=compet(A2);
answer=find(compet(A2)==1);
figure;plotchar(alphabet(:,answer));