计算智能与智能系统课程实验2:神经网络数值实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《计算智能与智能系统》
课程实验
实验题目:神经网络数值实验
实验一、利用感知器进行分类
输入代码:
%画输入向量的图像
P = [-0.5 -0.5 +0.3 -0.1 -4; -0.5 +0.5 -0.5 +1.0 5];
T = [1 1 0 0 1];
plotpv(P,T); % plotpv函数利用感知器的输入向量和目标向量来画输入向量的图像
%建立神经网络
net = newp([-40 1;-1 50],1);
hold on
%添加神经元的初始化值到分类图
linehandle = plotpc(net.IW{1},net.b{1}); % plotpc函数用来画分类线
%训练神经网络
E = 1; % E为误差
net.adaptParam.passes = 3; % 决定在训练过程中重复次数
while (sse(E)) % sse函数是用来判定误差E的函数
[net,Y,E] = adapt(net,P,T); % 利用输入样本调节神经网net
linehandle = plotpc(net.IW{1},net.b{1},linehandle);% 画出调整以后的分类线
drawnow; % 延迟一段时间
end
%模拟sim
p = [0.7; 1.2];
a = sim(net,p);
% 利用模拟函数sim计算出新输入p的神经网络的输出
plotpv(p,a);
circle = findobj(gca,'type', 'line');
set(circle,'Color','red');
hold on;
plotpv(P,T);
plotpc(net.IW{1},net.b{1});
hold off;
axis([-2 2 -2 2]);
输出:
实验二、BP神经网络
(1)输入代码:
%画出非线性函数图像
k = 1;
p = [-1:.05:1];
t = sin(k*pi*p);
plot(p,t,'-')
title('要逼近的非线性函数');
xlabel('时间');
ylabel('非线性函数');
%未训练网络输出
n = 10;
net = newff(minmax(p), [n,1], {'tansig''purelin'}, 'trainlm'); % 对于该初始网络,可以应用sim()函数观察网络输出
y1 = sim(net,p);
% 同时绘制网络输出曲线,并与原函数相比较
figure;
plot(p,t,'-',p,y1,'--')
title('未训练网络的输出结果');
xlabel('时间');
ylabel('仿真输出--原函数-');
%进行网络训练
net.trainParam.epochs = 50;
net.trainParam.goal = 0.01;
net = train(net,p,t);
%进行网络测试
y2 = sim(net,p);
figure;
plot(p,t,'-',p,y1,'--',p,y2,'-.')
title('训练后网络的输出结果');
xlabel('时间');
ylabel('仿真输出');
输出:
结果分析:从上图可知,没有经过训练的网
络,其输出结果模拟效果比较差,经过训练
的BP神经网络的模拟效果较好。
(2)改变非线性函数的K值
输入代码:
k = 5;
p = [-1:.05:1];
t = sin(k*pi*p);
plot(p,t,'-')
title('要逼近的非线性函数');
xlabel('时间');
ylabel('非线性函数');
n = 10;
net = newff(minmax(p), [n,1], {'tansig''purelin'}, 'trainlm'); % 对于该初始网络,可以应用sim()函数观察网络输出
y1 = sim(net,p);
% 同时绘制网络输出曲线,并与原函数相比较
figure;
plot(p,t,'-',p,y1,'--')
title('未训练网络的输出结果');
xlabel('时间');
ylabel('仿真输出--原函数-');
net.trainParam.epochs = 50;
net.trainParam.goal = 0.01;
net = train(net,p,t);
y2 = sim(net,p);
figure;
plot(p,t,'-',p,y1,'--',p,y2,'-.')
title('训练后网络的输出结果');
xlabel('时间');
ylabel('仿真输出');
输出:
结果分析:k值只改变了非线性函数的频率,但不影响网络的训练效果。
(3)隐层神经元数目的影响
k = 5;
p = [-1:.05:1];
t = sin(k*pi*p);
plot(p,t,'-')
title('要逼近的非线性函数');
xlabel('时间');
ylabel('非线性函数');
n = 50;
net = newff(minmax(p), [n,1], {'tansig''purelin'}, 'trainlm'); % 对于该初始网络,可以应用sim()函数观察网络输出
y1 = sim(net,p);
% 同时绘制网络输出曲线,并与原函数相比较
figure;
plot(p,t,'-',p,y1,'--')
title('未训练网络的输出结果');
xlabel('时间');
ylabel('仿真输出--原函数-');
net.trainParam.epochs = 50;
net.trainParam.goal = 0.01;
net = train(net,p,t);
y2 = sim(net,p);
figure;
plot(p,t,'-',p,y1,'--',p,y2,'-.')
title('训练后网络的输出结果');
xlabel('时间');
ylabel('仿真输出');
输出: