基于BP神经网络的草莓等级识别,BP神经网络的详细原理,神经网络1000案例之7
Posted 神经网络机器学习智能算法画图绘图
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于BP神经网络的草莓等级识别,BP神经网络的详细原理,神经网络1000案例之7相关的知识,希望对你有一定的参考价值。
BP神经网络的原理
人工神经网络无需事先确定输入输出之间映射关系的数学方程,仅通过自身的训练,学习某种规则,在给定输入值时得到最接近期望输出值的结果。作为一种智能信息处理系统,人工神经网络实现其功能的核心是算法。BP神经网络是一种按误差反向传播(简称误差反传)训练的多层前馈网络,其算法称为BP算法,它的基本思想是梯度下降法,利用梯度搜索技术,以期使网络的实际输出值和期望输出值的误差均方差为最小。
基本BP算法包括信号的前向传播和误差的反向传播两个过程。即计算误差输出时按从输入到输出的方向进行,而调整权值和阈值则从输出到输入的方向进行。正向传播时,输入信号通过隐含层作用于输出节点,经过非线性变换,产生输出信号,若实际输出与期望输出不相符,则转入误差的反向传播过程。误差反传是将输出误差通过隐含层向输入层逐层反传,并将误差分摊给各层所有单元,以从各层获得的误差信号作为调整各单元权值的依据。通过调整输入节点与隐层节点的联接强度和隐层节点与输出节点的联接强度以及阈值,使误差沿梯度方向下降,经过反复学习训练,确定与最小误差相对应的网络参数(权值和阈值),训练即告停止。此时经过训练的神经网络即能对类似样本的输入信息,自行处理输出误差最小的经过非线形转换的信息。
神经网络是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。
神经网络由多个神经元构成,下图就是单个神经元的图1所示:
。。。。。。。。。。。。。。。。。。。。。。。。图1 ,神经元模型
![在这里插入图片描述](https://img-blog.csdnimg.cn/29edde342c3945939ad5945145ca8509.png
图2是Sigmoid函数和双极S函数的图像,其中Sigmoid函数的图像区域是0到1,双极S函数的区间是正负1,归一化的时候要和传递函数的区域相对应,不然,可能效果不好
神经网络就是将许多个单一的神经元联结在一起,这样,一个神经元的输出就可以是另一个神经元的输入。
例如,下图就是一个简单的神经网络:
草莓等级
草莓为高档果品,又为浆果,所以搞好包装很重要。草莓的包装可根据成熟期和市场情况采用不同的包装形式。一般促成栽培,在元旦至春节前后供应市场的草莓,价格比较高,作为节日的珍贵礼品,目前一般常采用小盒包装,有两种形式,一种是透明小塑料盒包装,盒的规格各地有所不同,河北满城县草莓生产基地,包装盒的规格为12厘米×7.5厘米×2.5厘米,盒内装一层果,可装150克。北京地区包装盒的规格多为18厘米×11厘米×4厘米,每盒可装250克。这样不仅可避免装运过程中草莓的挤压碰撞,保证质量,而且出售时外观美丽,便于携带。另一种小盒包装为白色托盘,质地是聚丙烯,上覆保鲜膜,每小盒装15粒,分两层,重约250克,这种保鲜膜的优点是透明、保鲜、吸湿、透气性好,用这种保鲜包装与小塑料盒包装相比,草莓货架期可延长5~7天,包装的整个过程是小型包装机械作业完成,一般每2秒可包装1小盒,效率很高。无论采用哪种包装,装盒时均应轻拿轻放,边装边剔除霉变或破损果实,将果实按一定顺序、大小、方向整齐地放置,不宜装得太满,顶部留出1厘米左右的空隙,以减少果实破损。在向外运输时,可把小盒装入水果纸箱或塑料箱中,这样能保证果实品质,便于出售和短时间保存。
草莓采摘
现代农业向自动化,智农化,信息化发展,需要实时识别草莓的生长成熟情况,方便管理和机械化采摘,本文用BP神经网络对草莓进行等级识别,包括未成熟的草莓,二级草莓,一级草莓等
MATLAB编程代码如下
clc
clear
close all
load maynet2.mat
addpath 1特级
class1path=dir(‘1特级’);
num1 =[];
for i=1:length(class1path)-2
imgpath=[‘1特级’ class1path(i+2).name];%煤炭的路径
img1=imread(imgpath);%读取图片
[mx1,mx2,mx3] = size(img1);
numx = [reshape(img1(:,:,1),mx1mx2,1) reshape(img1(:,:,2),mx1mx2,1) reshape(img1(:,:,3),mx1*mx2,1)];
[ rgb1 ] =fenge(img1,numx,net,inputps,mx1,mx2);
num1 = [num1;rgb1];
end
addpath 2一级
class1path=dir(‘2一级’);
num2 =[];
for i=1:length(class1path)-2
imgpath=[‘2一级’ class1path(i+2).name];%煤炭的路径
img1=imread(imgpath);%读取图片
[mx1,mx2,mx3] = size(img1);
numx = [reshape(img1(:,:,1),mx1mx2,1) reshape(img1(:,:,2),mx1mx2,1) reshape(img1(:,:,3),mx1*mx2,1)];
[ rgb1 ] =fenge(img1,numx,net,inputps,mx1,mx2);
num2 = [num2;rgb1];
end
addpath 3二级
class1path=dir(‘3二级’);
num3 =[];
for i=1:length(class1path)-2
imgpath=[‘3二级’ class1path(i+2).name];%煤炭的路径
img1=imread(imgpath);%读取图片
[mx1,mx2,mx3] = size(img1);
numx = [reshape(img1(:,:,1),mx1mx2,1) reshape(img1(:,:,2),mx1mx2,1) reshape(img1(:,:,3),mx1*mx2,1)];
[ rgb1 ] =fenge(img1,numx,net,inputps,mx1,mx2);
num3 = [num3;rgb1];
end
save maydata3.mat num1 num2 num3
clc
clear
close all
load maydata1.mat
num=num1;
m = 400;
rand(‘seed’, 0)
n = randperm(size(num,1));
input_train=num(n(1:round(0.5nn)),1:4)';%训练数据的输入数据
output_train=bb(n(1:round(0.5nn))😅‘;%训练数据的输出数据
input_test=num(n(round(0.5nn+1:nn)),1:4)';%测试数据的输入数据
output_test=aa(n(round(0.5nn+1:nn)),1)’; %测试数据的输出数据
%选连样本输入输出数据归一化
[inputn,inputps]=mapminmax(input_train);%训练数据的输入数据的归一化
[outputn,outputps]=mapminmax(output_train);%训练数据的输出数据的归一化de
% %初始化网络结构
net06=newff(minmax(inputn),[31,6],‘logsig’,‘tansig’,‘traingdx’);
%net.trainParam.max_fail = 9;
net06.trainParam.epochs=5000;%最大迭代次数
net06.trainParam.lr=0.01;%学习率
net06.trainParam.goal=0.01;%学习目标
%网络训练
net06=train(net06,inputn,outputn);
%% BP网络预测
%预测数据归一化
inputn_test=mapminmax(‘apply’,input_test,inputps);
%网络预测输出
an=sim(net06,inputn_test);
%网络输出反归一化
aoutput=(mapminmax(‘reverse’,an,outputps));
% aoutput(aoutput==max(aoutput))=1;
% aoutput(aoutput<1)=0;
[mx,aoutput] = max(aoutput);
[~,output_test] = max(output_test);
%% 结果分析
figure
plot(aoutput,‘ro’)%预测的结果数据画图-代表虚线,O代表圆圈标识,r代表红色
hold on
plot(output_test,‘k*’)
hold off
legend(‘识别输出六位编码’)%标签
title(‘BP网络预测对比图’,‘fontsize’,12)
ylabel(‘二进制编码’,‘fontsize’,12)%Y轴
save maynet06.mat net06
[cfmat,order] = confusionmat(output_test,aoutput);
mat=cfmat;
k=6;
figure
imagesc(mat); %# Create a colored plot of the matrix values
colormap(flipud(gray)); %# Change the colormap to gray (so higher values are
title(‘混淆矩阵’);
textStrings = num2str(mat(😃,‘%0.02f’); %# Create strings from the matrix values
textStrings = strtrim(cellstr(textStrings)); %# Remove any space padding
[x,y] = meshgrid(1:k);
hStrings=text(x(😃,y(😃,textStrings(😃,‘HorizontalAlignment’,‘center’);
midValue = mean(get(gca,‘CLim’)); %# Get the middle value of the color range
textColors = repmat(mat(😃 > midValue,1,3);
set(hStrings,‘Color’,num2cell(textColors,2)); %# Change the text colors;
set(gca,‘XTick’,1:6,…
‘XTickLabel’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,… %# and tick labels
‘YTick’,1:6,… %同上
‘YTickLabel’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,…
‘TickLength’,[0 0]);
效果图
从效果图上看,BP神经网络能很好的实现对草莓的识别,有利于实现草莓的机械化,智能化种植采摘,实现现代农业。
BP神经网络是一种成熟的神经,相对于其他神经网络,拥有很多的训练函数,传递函数,可以调节的参数非常多,对各种问题都可以达到一个比较理想的效果,关键看如何调试参数,选择训练传递函数,有疑问或者其他应用方面,欢迎大家留言
以上是关于基于BP神经网络的草莓等级识别,BP神经网络的详细原理,神经网络1000案例之7的主要内容,如果未能解决你的问题,请参考以下文章
字母识别基于matlab BP神经网络英文字母识别含Matlab源码 2226期
人脸识别基于matlab GUI BP神经网络人脸识别(含识别率)含Matlab源码 891期