MATLAB实现智能计算方法实验:实验三 BP神经网络

资源链接

MATLAB实现智能计算方法课程所有实验代码资源链接为:MATLAB实现智能计算方法课程所有实验代码资源
本实验代码和excel文件可在GitHub仓库gitee仓库中进行下载

实验汇总

MATLAB实现智能计算方法课程所有实验汇总博客链接为:MATLAB实现智能计算方法实验汇总

实验目的

  1. 通过本次实验,进一步理解多层感知器的基本原理、BP网络的模型结构、BP算法;
  2. 掌握BP算法的手工计算,并编写代码实现学习过程;
  3. 掌握MATLAB工具箱中的相关函数,用工具箱实现编程,解决实际问题。

实验内容

利用BP神经网络,解决性别分类问题:

  1. 原始数据student.xls,部分数据放入报告中即可;

  2. 以身高、体重为输入,性别为输出,设计网络结构(以图的形式放入报告);

  3. 手工编码(python或MATLAB),实现对性别的分类计算,并用测试数据验证模型的正确性。

  4. 用MATLAB工具箱编程实现模型仿真并用测试数据对性别进行预测。

    测试数据1:身高(162cm),体重(56kg),性别(女)。
    测试数据2:身高(172cm),体重(75kg),性别(男)。

实验步骤

1. 数据预处理

将原始数据进行处理,性别为“男”设为1,为“女”设为0,应用“=IF(Bi=“男”,1,0)”公式在excel中完成数据预处理的操作,处理后部分数据如下表。

编号性别身高体重output
1174.291.91
215657.60
3151.759.90
4181.5107.21
5169.155.61
6175.690.61
7174.3731
8175.467.91

2. 设计网络结构

设计具有一层隐含层,隐含层为2个神经单元,输入层有2个神经单元,输出层有1个神经单元的神经网络,网络结构如下图2.1。
图2.1 网络结构

图2.1 网络结构

3. 手工编码

根据神经网络的算法原理在matlab中编写性别分类原理的手工代码,其中初始权值设置为(-2.4/F, 2.4/F)之间的随机数,F为所连单元的输入端个数,初始阈值设置为(-0.5, 0.5)间的随机数,学习率设置为0.01,期望误差设置为10-3,迭代次数设置为2000。绘制出训练过程中的最大均方误差曲线图及迭代结束时预测结果分布散点图,最后通过测试样本进行模型的检验,具体代码如下:

clear;
clc;

%训练模块
data = xlsread('student.xlsx');
P0 = data(:, 3 : 4);
T = data(:, 5);
[pn, minp, maxp] = premnmx(P0');
P = pn';
col = size(P, 1);
w = -1.2 + 2.4*rand(1, 6);
[miu, v, E] = deal(zeros(1, 3));
b = -0.5 + rand(1, 3);
yita = 0.01;
goal = 0.001;
error = [];
for epochs = 1: 2000
    s = [];
    for k = 1: col
        miu(1) = P(k, 1)*w(1) + P(k, 2)*w(2) + b(1);
        v(1) = 1/(1 + exp(-miu(1)));
        miu(2) = P(k, 1)*w(3) + P(k, 2)*w(4) + b(2);
        v(2) = 1/(1 + exp(-miu(2)));
        miu(3) = v(1)*w(5) + v(2)*w(6) + b(3);
        v(3) = 1/(1 + exp(-miu(3)));
        E(3) = v(3)*(1 - v(3))*(T(k) - v(3));
        E(2) = v(2)*(1 - v(2))*E(3)*w(6);
        E(1) = v(1)*(1 - v(1))*E(3)*w(5);
        w(6) = w(6) + yita*E(3)*v(2);
        w(5) = w(5) + yita*E(3)*v(1);
        for m = 1: 4
            w(m) = w(m) + yita*E(ceil(m/2))*P(k, 2-rem(m,2));
        end
        b = b + yita*E;
        s = [s, v(3)];
    end
    error0 = mse(s - T');
    if error0 <goal
        break
    else
        error = [error error0];
    end
end
figure;
%绘制迭代结束时预测结果分布图
for n = 1: size(s, 2)  
    if s(n)>0.5
        plot(n, s(n), '+');
        hold on;
    else
        plot(n, s(n), 'o');
        hold on;
    end
end
%绘制最大均方误差曲线图
figure;
plot(1:size(error, 2), error);

%测试模块
output = [];
testp0 = [162 56; 172 75];
[testpn] = premnmx(testp0', 1);
testp = testpn';
for testk = 1: 2
    miu(1) = testp(testk, 1)*w(1) + testp(testk, 2)*w(2) + b(1);
    v(1) = 1/(1 + exp(-miu(1)));
    miu(2) = testp(testk, 1)*w(3) + testp(testk, 2)*w(4) + b(2);
    v(2) = 1/(1 + exp(-miu(2)));
    miu(3) = v(1)*w(5) + v(2)*w(6) + b(3);
    v(3) = 1/(1 + exp(-miu(3)));
    output = [output, v(3)];
end
disp("预测结果为:");
disp(output);

执行程序得到最大均方误差曲线如图3.1,预测结果分布如图3.2。

图3.1 最大均方误差曲线

图3.1 最大均方误差曲线

图3.2 预测结果分布

图3.2 预测结果分布

通过图3.1可知共经过了2000次迭代,最终的最大均方误差为0.08左右。通过此网络验证测试样本,得到的结果为0.0096和0.9882,可以判定第一个样本性别为“女”,第二个为“男”,与样本所给结果一致。

4. 工具箱仿真

应用MATLAB工具箱编程实现模型仿真并用测试数据对性别进行预测,程序代码如下:

clear;
clc;
data = xlsread('student.xlsx');
P = data(:, 3 : 4);
T = data(:, 5);
%premnmx(P', T')对P',T'进行归一化处理
[pn, minp, maxp, tn, mint, maxt] = premnmx(P', T');
p1 = pn(:, 1: 260);
t1 = tn(:, 1: 260);
%反归一化还原成原始的数据
pn1 = postmnmx(p1, minp, maxp);
tn1 = postmnmx(t1, mint, maxt);
p = [162 172; 56 75];
t = [0 1];
[p2, minp1, maxp1, t2, mint1, maxt1] = premnmx(p, t);
pn2 = postmnmx(p2, minp1, maxp1);
tn2 = postmnmx(t2, mint1, maxt1);
net=newff(minmax(p1),[2,1],{'tansig','purelin'},'trainrp');
net.trainParam.epochs=2000;
net.trainParam.goal=0.00001;
net.trainparam.lr=0.01;
net=train(net,p1,t1);
%调用matlab神经网络工具箱自带的sim函数得到网络的预测值
y1=sim(net,p1);
tfz=postmnmx(y1,mint,maxt); 
tfz1=tfz';
%disp展示变量内容
disp(tfz);
disp(tn1);
temp1=sim(net,p2);
t_tfz=postmnmx(temp1,mint,maxt);
txl1=t_tfz';
disp(t_tfz);
disp(tn2);
y_t1=temp1(1,:);
%计算相对逼近误差
error1=y1-t1(1,:);
%计算相对预测误差
error3=y_t1-t2(1,:);
figure;
%绘制预测误差曲线
plot(1:260,error1,'r');
title("相对逼近误差");
figure;
plot(1:2,error3,'b');
title("相对预测误差");

执行程序,训练样本相对误差如图4.1,测试样本相对误差如图4.2,误差曲线如图4.3。
图4.1 相对逼近误差

图4.1 相对逼近误差

图4.2 相对预测误差

图4.2 相对预测误差

图4.3 误差曲线

图4.3 误差曲线

观察图4.3,可知迭代次数为2000,最大均方误差为0.28799,代入测试样本得到的结果为-0.0236和0.9995,判定第一个样本性别为“女”,第二个为“男”,与样本所给结果一致。

  • 4
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lazyn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值