% 清空环境变量
clc
clear
%% 训练数据预测数据提取及归一化
%下载五类叶片特征参数 训练的数据加载 150个
load data1 a1 %女贞 加载data1中的指定变量a1 a1是对数据进行归一化
load data2 a2 %银杏
load data3 a3 %五角枫
load data4 a4 %杨树
load data5 a5 %石楠
%五个特征参数矩阵合成一个矩阵
data(1:30,:)=a1(1:30,:);
data(31:60,:)=a2(1:30,:);
data(61:90,:)=a3(1:30,:);
data(91:120,:)=a4(1:30,:);
data(121:150,:)=a5(1:30,:);
%测试的数据加载 60个
load test1 b1 %女贞
load test2 b2 %银杏
load test3 b3 %五角枫
load test4 b4 %杨树
load test5 b5 %石楠
%五个特征参数矩阵合成一个矩阵
test(1:12,:)=b1(1:12,:);
test(13:24,:)=b2(1:12,:);
test(25:36,:)=b3(1:12,:);
test(37:48,:)=b4(1:12,:);
test(49:60,:)=b5(1:12,:);
%输入输出数据
input=data(:,2:9);
output1=data(:,1);
shuru=test(:,2:9);
shuchu1=test(:,1);
%把输出从1维变成5维
for i=1:150
switch output1(i)
case 1
output(i,:)=[1 0 0 0 0];
case 2
output(i,:)=[0 1 0 0 0];
case 3
output(i,:)=[0 0 1 0 0];
case 4
output(i,:)=[0 0 0 1 0];
case 5
output(i,:)=[0 0 0 0 1];
end
end
for i=1:60
switch shuchu1(i)
case 1
shuchu(i,:)=[1 0 0 0 0];
case 2
shuchu(i,:)=[0 1 0 0 0];
case 3
shuchu(i,:)=[0 0 1 0 0];
case 4
shuchu(i,:)=[0 0 0 1 0];
case 5
shuchu(i,:)=[0 0 0 0 1];
end
end
ww=rand(1,150);%生成1*150的随机数矩阵
[m,n]=sort(ww);%将矩阵ww的各列进行升序排列得到的矩阵是m,n是m矩阵在ww矩阵中的索引。
s=rand(1,60);
[p,q]=sort(s);
input_train=input(n(1:150),:)';
output_train=output(n(1:150),:)';
input_test=shuru(q(1:60),:)';
output_test=shuchu(q(1:60),:)';
%% 输入数据归一化
[inputn,inputps]=mapminmax(input_train);
%% 网络结构初始化
innum=8;%设置输入层神经元的个数
midnum=5;%设置隐含层神经元的个数
outnum=5;%设置输出层神经元的个数
%% 权值阈值初始化
w1=rands(midnum,innum);
b1=rands(midnum,1);
w2=rands(midnum,outnum);
b2=rands(outnum,1);
w2_1=w2;w2_2=w2_1;
w1_1=w1;w1_2=w1_1;
b1_1=b1;b1_2=b1_1;
b2_1=b2;b2_2=b2_1;
%% 学习率
xite=0.3;
alfa=0.8;
%% 在训练中根据网络预测误差调整网络的权值和阈值
for ii=1:500 %%训练次数
E(ii)=0; % 训练误差
for i=1:1:150
%% 选择本次训练数据
x=inputn(:,i);
% 隐含层输出
for j=1:1:midnum
I(j)=inputn(:,i)'*w1(j,:)'+b1(j);
Iout(j)=1/(1+exp(-I(j)));
end
% 输出层输出
yn=w2'*Iout'+b2;
%预测误差
e=output_train(:,i)-yn;
E(ii)=E(ii)+sum(abs(e));
%计算w2,b2调整量
dw2=e*Iout;
db2=e';
%计算w1,b1调整量
for j=1:1:midnum
S=1/(1+exp(-I(j)));
FI(j)=S*(1-S);
end
for k=1:1:innum
for j=1:1:midnum
dw1(k,j)=FI(j)*x(k)*(e(1)*w2(j,1)+e(2)*w2(j,2)+e(3)*w2(j,3)+e(4)*w2(j,4));
db1(j)=FI(j)*(e(1)*w2(j,1)+e(2)*w2(j,2)+e(3)*w2(j,3)+e(4)*w2(j,4));
end
end
%权值阈值更新
w1=w1_1+xite*dw1'+alfa*(w1_1-w1_2);
b1=b1_1+xite*db1'+alfa*(b1_1-b1_2);
w2=w2_1+xite*dw2'+alfa*(w2_1-w2_2);
b2=b2_1+xite*db2'+alfa*(b2_1-b2_2);
w1_2=w1_1;w1_1=w1;
w2_2=w2_1;w2_1=w2;
b1_2=b1_1;b1_1=b1;
b2_2=b2_1;b2_1=b2;
end
end
%% 测试输入数据归一化
inputn_test=mapminmax('apply',input_test,inputps);
%% 网络预测
for i=1:60
for j=1:1:midnum
I(j)=inputn_test(:,i)'*w1(j,:)'+b1(j);
Iout(j)=1/(1+exp(-I(j)));
end
%预测结果
fore(:,i)=w2'*Iout'+b2;
end
%% 类别统计
for i=1:60
output_fore(i)=find(fore(:,i)==max(fore(:,i)));
switch output_fore(i)
case 1
disp('女贞');
case 2
disp('银杏');
case 3
disp('五角枫');
case 4
disp('杨树');
case 5
disp('石楠');
end
end
%% 预测误差
error=output_fore-shuchu1(q(1:60))';
%% 画出预测叶片种类和实际叶片种类的分类图
figure(1)
plot(output_fore,'rpentagram')
hold on
plot(shuchu1(q(1:60))','b.')
legend('预测叶片类别','实际叶片类别')
%% 画出误差图
figure(2)
plot(error)
title('BP网络分类误差','fontsize',12)
xlabel('叶片种类','fontsize',12)
ylabel('分类误差','fontsize',12)
%% 找出判断错误的分类属于哪一类
k=zeros(1,5);
for i=1:60
if error(i)~=0
[b,c]=max(output_test(:,i));
switch c
case 1
k(1)=k(1)+1;
case 2
k(2)=k(2)+1;
case 3
k(3)=k(3)+1;
case 4
k(4)=k(4)+1;
case 5
k(5)=k(5)+1;
end
end
end
%% 找出每类的个体和
kk=zeros(1,5);
for i=1:60
[b,c]=max(output_test(:,i));
switch c
case 1
kk(1)=kk(1)+1;
case 2
kk(2)=kk(2)+1;
case 3
kk(3)=kk(3)+1;
case 4
kk(4)=kk(4)+1;
case 5
kk(5)=kk(5)+1;
end
end
%% 统计每类叶片的正确率
disp('每类叶片的识别率为:')
rightridio=(kk-k)./kk
%% 统计总识别率
disp('叶片的总识别率为:')
rightridio=(kk-k)/kk
k
kk
没有合适的资源?快使用搜索试试~ 我知道了~
树叶识别基于matlab BP神经网络树叶类别【含Matlab源码 799期】.zip
共43个文件
mat:35个
m:5个
jpg:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 6 下载量 92 浏览量
2021-12-14
09:49:02
上传
评论 3
收藏 130KB ZIP 举报
温馨提示
CSDN海神之光上传的代码均可运行,亲测可用,直接替换数据即可,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作 图像识别:表盘识别、车道线识别、车牌识别、答题卡识别、电器识别、跌倒检测、动物识别、发票识别、服装识别、汉字识别、红绿灯识别、火灾检测、疾病分类、交通标志牌识别、口罩识别、裂缝识别、目标跟踪、疲劳检测、身份证识别、人民币识别、数字字母识别、手势识别、树叶识别、水果分级、条形码识别、瑕疵检测、芯片识别、指纹识别
资源推荐
资源详情
资源评论
收起资源包目录
【树叶识别】基于matlab BP神经网络树叶类别【含Matlab源码 799期】.zip (43个子文件)
【树叶识别】基于matlab BP神经网络树叶类别【含Matlab源码 799期】
test2.mat 951B
shu2.mat 4KB
shuju4.mat 4KB
data1.mat 2KB
spread.m 454B
juju3.mat 881B
ju3.mat 2KB
运行结果4.jpg 19KB
cece2.mat 2KB
shuju3.mat 5KB
ju1.mat 2KB
shuju2.mat 5KB
test5.mat 862B
cece4.mat 2KB
ju5.mat 2KB
cece3.mat 2KB
shu4.mat 4KB
data3.mat 2KB
bp_pca.m 4KB
cece5.mat 1KB
shuju1.mat 5KB
juju5.mat 781B
test3.mat 957B
bp_jihe.m 5KB
shu5.mat 4KB
运行结果5.jpg 16KB
cece1.mat 2KB
data2.mat 2KB
shuju5.mat 4KB
shu3.mat 4KB
juju2.mat 876B
运行结果6.JPG 27KB
test1.mat 957B
data5.mat 2KB
juju1.mat 877B
bp_ju.m 5KB
data4.mat 2KB
BP.m 5KB
juju4.mat 876B
shu1.mat 4KB
test4.mat 956B
ju2.mat 2KB
ju4.mat 2KB
共 43 条
- 1
资源评论
- zbxh26523697102022-05-07用户下载后在一定时间内未进行评价,系统默认好评。
- 月渡小河2022-12-20资源很实用,对我启发很大,有很好的参考价值,内容详细。
- m0_729442052023-07-02资源简直太好了,完美解决了当下遇到的难题,这样的资源很难不支持~
- 2301_774735202023-07-06果断支持这个资源,资源解决了当前遇到的问题,给了新的灵感,感谢分享~
海神之光
- 粉丝: 3w+
- 资源: 2091
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功