%第五题
% %% 设置网络参数
% n=input('输入层神经元个数:'); %选择输入层节点数n
% m=input('中间层神经元个数:'); %选择中间层节点数m
% l=input('输出层神经元个数:'); %选择输出层节点数l
% xite=input('输入学习率xite:'); %选用不同的学习率
% alfa=input('输入动量系数alfa:'); %选用不同的动量系数
% mode=input('选择单极或双极函数,单极输入1,双极输入2:'); %选择转移函数
%% 建立网络
[alphabet,targets]=prprob;
alphabet = alphabet(:,[1 9 15]); %训练集 由26个标准字母组成的输入向量矩阵 从中选择字母A、I、O
targets=targets(:,[1 9 15]); %目标值
[R,Q]=size(alphabet);
[S2,Q]=size(targets);
X=alphabet; %输入向量
S1=4;
%net=newff(minmax(alphabet),[S1 S2],{'logsig' 'logsig'},'traingdx');%生成一个前馈BP网络 traingdx为带动量项的算法
net=newff(minmax(alphabet),[S1 S2],{'logsig' 'logsig'},'traingd');%生成一个前馈BP网络 traingd为标准BP算法
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; %冲量参数??
X=alphabet;T=targets; %X为训练集,T为目标值
[net,tr]=train(net,X,T); %对神经网络进行训练 用变量net保存网络训练结果
%为使网络对输入有一定的容错能力,再利用含有噪声的输入数据训练网络
netn=net; %重新使用网络
net.trainParam.goal=0.6; %训练目标误差
net.trainParam.epochs=300; %训练时间
T=[targets targets targets targets];
for i=1:10
X=[alphabet+randn(R,Q)*0.1,alphabet+randn(R,Q)*0.2,alphabet+randn(R,Q)*0.1,alphabet+randn(R,Q)*0.2];%输入数据加噪声
[netn,tr] = train(netn,X,T); %对神经网络进行训练
end
%为了保证网络总能够正确对理想输入信号进行识别,再次用理想信号进行训练
netn.trainParam.goal = 0.1; %训练目标误差
netn.trainParam.show = 5; %计算步长
net.trainParam.epochs = 500; %训练时间
X=alphabet;
T=targets;
[netn,tr]=train(netn,X,T); %对神经网络进行训练
%% 测试网络
noise_range=0:.05:.5; %产生噪声
max_test=100; %测试次数 噪声信号的个数
network1=[];network2=[];T=targets;
for noiselevel=noise_range %依次加入误差(噪声)
errors1=0;errors2=0;
for i=1:max_test; %测试开始
X=alphabet+randn(35,3)*noiselevel; %输入中加入噪声
A=sim(net,X); %对神经网络进行仿真(不含噪声)
AA=compet(A); %引入竞争函数,保证抗干扰能力
errors1=errors1+sum(sum(abs(AA-T)))/2; %误差计算(不含噪声)
An=sim(netn,X); %对神经网络进行仿真(含噪声)
AAn=compet(An);
errors2=errors2+sum(sum(abs(AAn-T)))/2;%误差计算(含噪声)
end
network1=[network1 errors1/26/100]; %每个噪声信号在每个字母上产生的平均噪声
network2=[network2 errors2/26/100]; %每个噪声信号在每个字母上产生的平均噪声
end
echo on
clf
%% 输出图形
plot(noise_range,network1*100,'--',noise_range,network2*100);%画图
title('识别误差'); %标题
xlabel('噪声指标'); %横坐标
ylabel('无噪声训练网络--有噪声训练网络--');%纵坐标
%仿真字母A
noisyJ=alphabet(:,1)+randn(35,1)*0.2; %对字母A加噪声
figure;
plotchar(noisyJ); %画出输入向量
A2=sim(net,noisyJ); %比较无噪声和有噪声时候的识别误差
A2=compet(A2); %引进竞争函数
answer=find(compet(A2)==1); %通过比较找出对应的输出向量
figure;
plotchar(alphabet(:,1)); %画出网络识别后的图形
%仿真字母I
noisyJ=alphabet(:,2)+randn(35,1)*0.2; %对字母I加噪声
figure;
plotchar(noisyJ);
A2=sim(net,noisyJ);
A2=compet(A2);
answer=find(compet(A2)==1);
figure;
plotchar(alphabet(:,2));
%仿真字母O
noisyJ=alphabet(:,3)+randn(35,1)*0.2;
figure;
plotchar(noisyJ);
A2=sim(net,noisyJ);
A2=compet(A2);
answer=find(compet(A2)==1);
figure;
plotchar(alphabet(:,3));
% noise_percent=0.2;
% for k=1:3
% noisyChar=alphabet(:,k)+randn(35,1)*noise_percent;
% subplot(6,9,k+floor(k/9.5)*9);
% plotchar(noisyChar);
% de_noisyChar=sim(net,noisyChar);
% de_noisyChar=compet(de_noisyChar);
% answer=find(de_noisyChar==1);
% subplot(6,9,k+floor(k/9.5)*9+9);
% plotchar(alphabet(:,answer));
% end
set(gcf,'Position',[10,60,900,700],'color','w')
neural network.zip_Random Number _S函数BP网络_adding momentum_区间神经网络
版权申诉
136 浏览量
2022-07-13
22:37:25
上传
评论 1
收藏 42KB ZIP 举报
周楷雯
- 粉丝: 78
- 资源: 1万+
最新资源
- 笔记实验六,spark,大数据分析
- ####蓝桥杯python的详细的信息介绍
- 电子万年历软件仿真(经过多次修改,保证正确性)
- Unity XR 手势射击控制脚本(适用于任何可手势识别的设备)
- 机械设计全自动电表(NB和IC卡表)控制和上壳装配线sw16可编辑非常好的设计图纸100%好用.zip
- 基于matlab的EAN-13条形码识别系统GUI界面.zip代码53
- matlab基于bp神经网络交通信号标志识别GUI界面13个标志.zip代码54
- 电子万年历答辩实物展示视频mp4格式
- 基于python实现的程序,包括哈希感知算法cvHash,图像切割cvsplit,固定目标检测cvRec(附文档ppt)等
- 计算0-10000之间所有偶数的和
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈