基于负相关学习多神经网络集成的目标识别算法matlab仿真(代码片段)

fpga和matlab fpga和matlab     2022-12-02     247

关键词:

目录

一、理论基础

二、案例背景

三、MATLAB核心代码

四、仿真结论分析


一、理论基础

        学习方法的泛化能力、学习效率和易用性是机器学习及其应用过程中所面临的三个关键性挑战问题。神经网络集成学习通过训练多个神经网络并将其结果进行合成,显著地提高了学习系统的泛化能力,成为近年来机器学习领域一个重要的研究方向。在分析神经网络集成方法研究现状的基础上,以实验设计、粗集理论、特征加权以及并行技术等为支撑,围绕神经网络集成学习方法的易用性、泛化能力和学习效率等问题展开研究,提出了更有效的神经网络集成方法,并将其应用到地震预报领域。神经网络集成的结构(个体网络的数目和个体网络的结构)和个体网络的训练参数(如训练次数和学习率等)关系到集成性能的好坏,同时影响着集成是否易于被使用。本文首先研究了实验设计在神经网络集成中的应用,提出了一种简单、科学地确定神经网络集成结构和个体网络的训练参数的方法。使用者可以用较少的实验次数,分析影响神经网络集成泛化能力的因素以及确定各因素用什么水平搭配起来对集成的泛化能力最佳。同时,通过最近

公式1:

对应程序为:

公式2:

对应程序为:

 和分别对应的程序为:

公式3:

对应的程序为:

公式4:

对应的程序为:

其余的和多集成BP神经网络的相关理论相似,这里不做进一步的介绍了。

二、案例背景

       负相关学习是 通过 一个惩罚 项加强集成 网络 中个 体 网络之间的差异度,下面对该算法作简单说明。

 

三、MATLAB核心代码

该神经网络的顶层函数如下:

clc;
clear;
close all;
warning off;
RandStream.setDefaultStream(RandStream('mt19937ar','seed',1));

%加载数据
load australian.dat

data          = australian;
%输入数据预处理
SET           = [1:14];
for i = SET
    P(:,i) = data(1:100,i)/max(data(1:100,i));
end
[P,minp,maxp] = premnmx(P);
T             = data(1:end,end);

% P    = rand(200,1);
% T    = round(P);
Len              = length(P);
%输入层节点
NI               = size(P,2);
%输出层节点
No               = 1;
%隐层节点
Nh               = 14;
%最大迭代次数 
Max_iteration    = 3000;
%目标精度
Paim             = 1e-3; 
%学习率设定值
Learning_Rate    = 0.5;
error            = 0;
error2           = zeros(1,Len);

%BP1~4
KER              = 4;%集成个数
W0               = rand(NI,Nh,KER); 
deltaW0          = zeros(NI,Nh,KER); 
dW0              = zeros(NI,Nh,KER);  
W                = rand(Nh,No,KER);
deltaW           = zeros(Nh,No,KER); 
dW               = zeros(Nh,No,KER);


ERR              = [];
Index            = 1;  

while(Index<=Max_iteration)   
  Index
  jj=1;     
  error2 = zeros(Len,KER);
  while(jj<=Len)         
    for k=1:No;
        d(k)=T(jj);  
    end
    for i=1:NI;
        x(i)=P(jj,i);
    end
    %集成多个BP神经网络
    for bpj = 1:KER      
        for j=1:Nh%BP前向            
            net=0;              
            for i=1:NI                
                net=net+x(i)*W0(i,j,bpj); %加权和∑X(i)V(i)            
            end
            y(j)=1/(1+exp(-net));               
        end
        for k=1:No             
            net=0;              
            for j=1:Nh                  
                net=net+y(j)*W(j,k,bpj);             
            end
            %输出值
            o(k)=1/(1+exp(-net));              
        end
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        errortmp=0.0;         
        for k=1:No              
            errortmp=errortmp+(d(k)-(o(k)))^2;%传统的误差计算方法
        end
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        error2(jj,bpj)=0.5*errortmp/No;         
        for k=1:No%BP反向计算          
            yitao(k)=(d(k)-o(k))*o(k)*(1-o(k));%偏导      
        end
        for j=1:Nh         
            tem=0.0;         
            for k=1:No             
                tem=tem+yitao(k)*W(j,k,bpj);       
            end
            yitay(j)=tem*y(j)*(1-y(j));%偏导    
        end
        for j=1:Nh%权值更新         
            for k=1:No              
                deltaW(j,k,bpj) = Learning_Rate*yitao(k)*y(j);            
                W(j,k,bpj)      = W(j,k,bpj)+deltaW(j,k,bpj);            
            end
        end
        for i=1:NI         
            for j=1:Nh              
                deltaW0(i,j,bpj) = Learning_Rate*yitay(j)*x(i);            
                W0(i,j,bpj)      = W0(i,j,bpj)+deltaW0(i,j,bpj);             
            end
        end
    end
    jj=jj+1; 
  end
  %BP训练结束     
  error = sum(mean(error2));  
  %误差是否达到精度    
  if error<Paim;
     break;
  end
  Index = Index+1;
  ERR   = [ERR,error]; 
end
figure;
semilogy([1:10:Index-1],ERR(1:10:end),'linewidth',2);
grid on
xlabel('迭代次数');
xlabel('误差');


if Learning_Rate == 0.01;
   save S11.mat Index ERR
end

if Learning_Rate == 0.05;
   save S12.mat Index ERR 
end
if Learning_Rate == 0.2;
   save S13.mat Index ERR 
end
if Learning_Rate == 0.5;
   save S14.mat Index ERR 
end
clc;
clear;
close all;
warning off;
RandStream.setDefaultStream(RandStream('mt19937ar','seed',1));

%加载数据
load australian.dat

data          = australian;
%输入数据预处理
SET           = [1:14];
for i = SET
    P(:,i) = data(1:100,i)/max(data(1:100,i));
end
[P,minp,maxp] = premnmx(P);
T             = data(1:end,end);

% P    = rand(200,1);
% T    = round(P);
Len              = length(P);
%输入层节点
NI               = size(P,2);
%输出层节点
No               = 1;
%隐层节点
Nh               = 14;
%最大迭代次数 
Max_iteration    = 3000;
%目标精度
Paim             = 1e-3; 
%学习率设定值
Learning_Rate    = 0.02;
lemda            = 0.3;
error            = 0;
error2           = zeros(1,Len);

%BP1~4
KER              = 4;%集成个数
W0               = rand(NI,Nh,KER); 
deltaW0          = zeros(NI,Nh,KER); 
dW0              = zeros(NI,Nh,KER);  
W                = rand(Nh,No,KER);
deltaW           = zeros(Nh,No,KER); 
dW               = zeros(Nh,No,KER);


ERR              = [];
Index            = 1;  

while(Index<=Max_iteration)   
  Index
  jj=1;     
  error2 = zeros(Len,KER);
  while(jj<=Len)         
    for k=1:No;
        d(k)=T(jj);  
    end
    for i=1:NI;
        x(i)=P(jj,i);
    end
    %集成多个BP神经网络
    for bpj = 1:KER      
        for j=1:Nh%BP前向            
            net=0;              
            for i=1:NI                
                net=net+x(i)*W0(i,j,bpj); %加权和∑X(i)V(i)            
            end
            y(j)=1/(1+exp(-net));               
        end
        for k=1:No             
            net=0;              
            for j=1:Nh                  
                net=net+y(j)*W(j,k,bpj);             
            end
            %输出值
            o(k,bpj)=1/(1+exp(-net));              
        end
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        errortmp = 0.0;         
        for k=1:No              
            errortmp=errortmp+(d(k)-o(k,bpj))^2;
        end
        errortmp = 0.5*errortmp/No;
        errortmp2= 0.0;  
        
        %F(n) = 1/M x ∑f(i)
        F        = mean(o(k,:));  
        for k=1:No
            p(k)      =(o(k,bpj) - F) * (sum(o(k,:) - F) - (o(k,bpj) - F));
            errortmp2 = errortmp2+lemda*p(k);
        end
        errortmp2 = errortmp2/No;
        error2(jj,bpj)=errortmp + errortmp2;
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        for k=1:No%BP反向计算
            %偏导  
            yitao(k)=((d(k) - o(k,bpj)) + lemda*(o(k,bpj) - F))*o(k,bpj)*(1-o(k,bpj));
        end
        for j=1:Nh         
            tem=0.0;         
            for k=1:No             
                tem=tem+yitao(k)*W(j,k,bpj);       
            end
            yitay(j)=tem*y(j)*(1-y(j));%偏导    
        end
        for j=1:Nh%权值更新         
            for k=1:No              
                deltaW(j,k,bpj) = Learning_Rate*yitao(k)*y(j);            
                W(j,k,bpj)      = W(j,k,bpj)+deltaW(j,k,bpj);            
            end
        end
        for i=1:NI         
            for j=1:Nh              
                deltaW0(i,j,bpj) = Learning_Rate*yitay(j)*x(i);            
                W0(i,j,bpj)      = W0(i,j,bpj)+deltaW0(i,j,bpj);             
            end
        end
    end
    jj=jj+1; 
  end
  %BP训练结束     
  error = sum(mean(error2));  
  %误差是否达到精度    
  if error<Paim;
     break;
  end
  Index = Index+1;
  ERR   = [ERR,error]; 
end
figure;
semilogy([1:10:Index-1],ERR(1:10:end),'linewidth',2);
grid on
xlabel('迭代次数');
xlabel('误差');
% axis([0,Index,1e-6,1]);

if Learning_Rate == 0.01;
   save S21.mat Index ERR
end

if Learning_Rate == 0.05;
   save S22.mat Index ERR 
end
if Learning_Rate == 0.2;
   save S23.mat Index ERR 
end
if Learning_Rate == 0.5;
   save S24.mat Index ERR 
end

if lemda == 0.01;
   save S21l.mat Index ERR
end
if lemda == 0.05;
   save S22l.mat Index ERR
end
if lemda == 0.1;
   save S23l.mat Index ERR
end
if lemda == 0.2;
   save S24l.mat Index ERR
end
if lemda == 0.3;
   save S25l.mat Index ERR
end

四、仿真结论分析

传统的4集成BP神经网络,不同的学习率下其仿真结论如下所示:

        从上面的仿真结果可知,随着学习率的增加,BP神经网络的训练误差越来越小。这里,训练目标误差设定在0.001。

        改进目标函数,其仿真结果如下图所示:

         从上面的仿真结果可知,随着学习率的增加,BP神经网络的训练误差越来越小。 下面对比一下两种误差方式下的算法性能对比:

         从上面的仿真对比可知,改进误差算法的BP神经网络,其网络的收敛速度更快,且能在相同训练次数的情况下,可以获得更高精度的预测结果。

A05-32

目标识别算法设计指引

...ssification)​;目标识别阵营识别算法分为两大类,一类是基于图像处理的机器学习算法(传统算法),另一类是基于深度学习的识别算法;传统算法的检测精度和识别实时性差于深度学习算法,但深度学习算法依赖于GPU硬件,需... 查看详情

机器学习算法笔记7.基于信息论的网络

【机器学习算法笔记】7.基于信息论的网络根据最大互信息原则作为网络的最优化目标函数。7.1最大互信息原则(相关)(a)(b)(c)(d)7.2信息论相关定义7.2.1信息量7.2.2熵(微分熵&... 查看详情

基于深度学习的目标检测

基于深度学习的目标检测普通的深度学习监督算法主要用来做分类,分类的目标是要识别出图中所示是一只猫。而在ILSVRC(ImageNetLargeScaleVisualRecognitionChallenge)竞赛以及实际的应用中,还包括目标定位和目标检测等任务。其中目... 查看详情

基于深度学习的目标检测

普通的深度学习监督算法主要是用来做分类,如图1(1)所示,分类的目标是要识别出图中所示是一只猫。而在ILSVRC(ImageNetLargeScaleVisualRecognitionChallenge)竞赛以及实际的应用中,还包括目标定位和目标检测等任务。其中目标定位是... 查看详情

4.基于深度学习的目标检测算法的综述(转)

4.基于深度学习的目标检测算法的综述(转)原文链接:https://www.cnblogs.com/zyly/p/9250195.html目录一相关研究1、选择性搜索(SelectiveSearch)2、OverFeat二、基于区域提名的方法1、R-CNN 2、SPP-Net3、FastR-CNN4、FasterR-CNN5、R-FCN 三端对端的... 查看详情

基于深度学习的天气识别算法对比研究-tensorflow实现-卷积神经网络(cnn)|第1例(内附源码+数据)(代码片段)

🥧我的环境:语言环境:Python3深度学习环境:TensorFlow2🥂相关教程:编译器教程:新手入门深度学习|1-2:编译器JupyterNotebook深度学习环境配置教程:新手入门深度学习|1-1:配置深度学习环... 查看详情

基于深度学习的目标检测算法综述

基于深度学习的目标检测算法综述(一)基于深度学习的目标检测算法综述(二)基于深度学习的目标检测算法综述(三)本文内容原创,作者:美图云视觉技术部检测团队,转载请注明出处目... 查看详情

项目实战解析:基于深度学习搭建卷积神经网络模型算法,实现图像识别分类(代码片段)

...通过项目开发实例,带领大家从零开始设计实现一款基于深度学习的图像识别算法。学习本章内容 查看详情

目标跟踪检测算法(四)——多目标扩展

...ttps://blog.csdn.net/qq_34919792/article/details/89893665【嵌牛导读】基于深度学习的算法在图像和视频识别任务中取得了广泛的应用和突破性的进展。从图像分类问题到行人重识别问题,深度学习方法相比传统方法表现出极大的优势。与行... 查看详情

如何通过人工神经网络实现图像识别

...能控制及系统建模等领域得到越来越广泛的应用。尤其是基于误差反向传播(ErrorBackPropagation)算法的多层前馈网络(Multiple-LayerFeedforwardNetwork)(简称BP网络),可以以任意精度逼近任意的连续函数,所以广泛应用于非线性建模、... 查看详情

基于二轴云台目标跟踪系统设计

...跟踪控制 PID算法及改进串口通讯协议前言文本简述一个基于二轴云台的目标跟踪系统的设计思路,并在之后会实践记录 查看详情

1000个大数据/人工智能毕设选题推荐

...毕业设计题目选择方向。大数据/人工智能毕设选题:基于社交大数据的用户画像系统设计与实现基于TF-IDF和朴素贝叶斯方法的海量文本分类研究基于卷积神经网络的图像修复系统设计与实现智慧校园语音交互系统的设计与实... 查看详情

目标检测算法综述

...。常见的算法有R-CNN、Fast R-CNN、Faster R-CNN等等。基于候选区域(Region Proposal)的,如R-CNN、SPP-net、FastR-CNN、FasterR-CNN、R-FCN;基于端到端(End-to-End),无需候选区域(Region Proposal)的,如YOLO、SSD。  对于上述两... 查看详情

计算机视觉项目实战-目标检测与识别(代码片段)

...😊😊😊本次博客内容将继续讲解关于OpenCV的相关知识🎉作者简介:⭐️⭐️⭐️目前计算机研究生在读。主要研究方向是人工智能和群智能算法方向。目前熟悉深度学习(keras、pytorch、yolov5),p... 查看详情

交通标志识别基于matlabhog特征结合bp神经网络交通标志识别含matlab源码2331期(代码片段)

...杂环境背景下交通标志牌难以定位识别的问题,提出一种基于交通标志牌特定颜色以及多尺度Retinex的图像增强和仿射变换的道路交通标志牌定位算法以及基于支持向量机的标志牌识别算法,经试验验证,该检测识别方法可将目标识... 查看详情

[当人工智能遇上安全]5.基于机器学习算法的主机恶意代码识别研究(代码片段)

您或许知道,作者后续分享网络安全的文章会越来越少。但如果您想学习人工智能和安全结合的应用,您就有福利了,作者将重新打造一个《当人工智能遇上安全》系列博客,详细介绍人工智能与安全相关的论文... 查看详情

基于区域的二阶段算法思想和理解综述

基于区域的二阶段算法思想和理解综述待办昨天待办decriptiondecription摘要:图像目标检测是图像处理领域的基础。自从2012年CNN的崛起,深度学习在Detection的持续发力,为这个领域带来了变革式的发展。深度学习出现之前,传统... 查看详情

深度学习与图神经网络核心技术实践应用高级研修班-day4基于深度学习的目标检测(object_detection)(代码片段)

基于深度学习的目标检测(object_detection)1.目标检测相关介绍2.RCNN系列模型3.YOLO系列模型1.目标检测相关介绍目标检测要解决的问题适应不同尺度多样化2.RCNN系列模型(1)输入测试图像(2)利用SelectiveSearch算法在图像中从下到... 查看详情