MATLAB环境下基于人工蜂群优化算法的卷积神经网络CNN图像识别

news2025/2/26 11:37:34

地球上的所有生物包括人类都在不断演变、进化,在这样的过程中逐渐适应了外界的环境,找到了适合自己的生存方式。不同的生物有不同的生存机制,群体活动作为一种常见的生存机制广泛存在于自然界中,例如蚂蚁、鸟群、鱼群、峰群甚至人类等。群体活动的优势在于:通过群体成员协调性的有规则性的行为,克服单个个体能力的局限性,实现了群体的目标,保持了种群的延续。研究者通过观察生物的群体行为,受此启发,同时结合生物学、数学、管理学、计算机等学科,创造了群体智能算法。将生物界的群体价值通过数学思想、计算机模拟算法、管理学思维统一表现出来,诞生了遗传算法、鸟群算法、人工鱼群算法等。人工蜂群算法是新近提出的种群智能算法。

蜜蜂是自然界中社会群居性昆虫中的一种,其中包括了蜂王、雄蜂以及工蜂。蜂群中存在严密的组织和分工,各个蜂种都有各自的工作。一个蜂群中通常只有一只蜂王,经受精卵发育而成,主要任务是产卵繁衍后代;蜂群中有多个雄蜂,由未受精的卵发育而来,主要任务是与蜂王交尾实现后代繁殖;蜂群中最多的是工蜂,是发育不全的雌性蜂,主要任务是采蜜、筑巢、哺育幼蜂等,是整个蜂群中最为勤劳最为辛苦的成员。虽然单只蜜蜂的行为模式非常简单,但是通过他们的协调工作,完成了食物采集、种群繁育、种群防卫等工作,使整个蜂群有效地运作。

研究者受蜂群行为的启发,自年起,提出了多种群体智能算法,包括基于蜂群繁殖行为的蜜蜂婚配算法、蜜蜂交配优化算法、蜂后进化算法等,这些算法在进行高次非线性函数优化的问题,随机动态规划问题,优化解局部搜索以及全局搜索等问题上得到了广泛的应用。其中蜂后进化算法的引入有效的增强了遗传算法的性能,提升了该算法的全局最优解寻优速度。

在此基础上,科研工作者深入研究蜜蜂采蜜的行为,发现蜂群中的工蜂通常只会在一定的范围内收集蜂蜜,而且每次进行釆蜜活动前,大多数工蜂都作为内勤留在蜂巢内,只派出少量工蜂作为侦察蜂,其主要任务是寻找食物源,一旦找到了新的蜜源,就转变为采集蜂,飞回蜂巢并通过“”字形舞或圆圈舞等蜜蜂间用来传递信息的独特方式,来展示寻找到的蜜源的包括质量、种类、方位以及距离等相关信息。巢内值内勤的工蜂们还可以通过侦察蜂舞蹈的兴奋程度看出蜜源的质量,在各个蜜源之间选择最好最优的那个,派出尽可能多的内勤去该蜜源采集蜂蜜。在采蜜的过程中,旧的蜜源逐渐消耗殆尽,侦察蜂又会以它们特有的方式继续寻找新的优质蜜源,从而引领内勤放弃已经采集过的蜜源转向新的蜜源。

蜂群之所以能进行高速有效的花蜜采集,最重要的就是花蜜采集过程中蜜蜂职责的有效转换以及各个蜜源收益率信息的实时交互。(工作之初,派出的侦察蜂在蜂巢周围随机寻找蜜源,找到蜜源后,通过“8”字形舞或圆圈舞向等候区的观察蜂展示蜜源所处的方位、蜜源花蜜的种类、蜜源的质量以及数量等信息,通过各个蜜源整体收益率的比较,选取收益率较高的那些蜜源采集花蜜,派出对应数量的采集蜂,然后该侦察蜂转变成引领蜂,带领采集蜂采集该处的花蜜。(在各个蜜源采集的过程中,各个蜜源的收益率会实时变化,引领蜂时刻记录并存储着这些数据,并与其他蜜蜂交流,收益率上升会使更多的非雇佣蜂转变为雇佣蜂,加入该蜜源的采集工作,收益率不变则对应蜜源采集蜂数量不变;收益率下降到一定程度则放弃该蜜源,采集花蜜的雇佣蜂回到蜂巢转变为非雇佣蜂,随机作为侦察蜂或观察蜂,进入下一次采集工作。与此同时,在花蜜采集的过程中,不管各个蜜源质量好坏,整个群体作为侦察蜂的工蜂数目一直保持5%~10%的数目,持续在蜂巢周围寻找新的优质的蜜源,以取代收益率下降的劣质蜜源。通过这样的过程,蜂群可以一直保持很高的收益率,找到最优值的蜜源,可以在最短的时间内采集到更多更优质的花蜜。

当使用神经网络对输入的数据进行训练时,程序初始化一组值,用适应度函数评价网络训练结果与期望值的误差,然后进入迭代过程,使用误差梯度下降法相应调整权值和阈值,以实现最终的优化目标。采用人工蜂群算法对神经网络进行优化具有以下几个优点:

(1)引入人工蜂群的种群概念后,使用神经网络进行训练时,程序初始化N组m维向量,N是初始种群数目,即蜜源数目。种群的每个初始值都是在权值和阈值取值范围内随机产生的,在种群数目足够的情况下,初始种群均匀分布在多峰问题连接权空间中。有效地避免了神经网络学习训练时,单一初始值可能造成的陷入局部最小值,从而无法找到全局最优值。

(2)引入种群概念后,改变了传统神经网络初始化时只有一组值,只能在一个维度上实现误差的调整的现状。种群中的每一个初始化值对应了一个网络,同时计算出该组值对应网络的输出误差,同时在多个维度使用梯度下降法调整各个网络的参数,实现神经网络误差的快速收敛。更重要的是,人工蜂群算法引入的侦察蜂概念,主要针对网络训练时,初始化权值和阈值逐步调整的过程中,可能陷入局部最小值,导致该组值无法继续完成最优权值和阈值的搜索的问题,在达到设定的停滞次数时,即神经网络训练迭代过程中误差不能继续优化减小的次数,直接跳出该点,在取值范围内随机产生一组新解,继续全局最优值的搜寻工作,避免了陷入局部最小值导致无法继续训练以及增加无谓的计算量等问题,加快了神经网络整体寻优的进度。

(3)在神经网络训练的整个过程中,算法具有记忆功能,在每次的迭代时,通过适应度函数的大小比较,控制种群中每组值更新与否,始终记录适应度值更优的位置。通过全局适应度值的比较找到了每次迭代过程中全局的最优一组值,从而控制算法是否继续,避免了无记忆功能时造成的重复训练等问题,也加快了网络训练的速度。

(4)人工蜂群算法引入轮赌盘选择策略,即在每步迭代的过程中,由各个位置的适应度计算对应的选择概率,并由轮赌盘机制选择概率高的位置附近进行搜索和位置更新。选择机制中由各个位置的适应度计算被选择概率,适应度高的对应的概率大,对应的被选中的几率也越大。可以理解为,轮赌盘选择机制为放大镜作用,使用该机制对适应度值较大的位置进行更细化的搜索,以便找到更优的位置;忽略适应度较低的位置,减少计算量。

鉴于人工蜂群优化算法和卷积神经网络CNN的优势,提出一种基于人工蜂群优化算法的卷积神经网络CNN图像识别方法,算法程序运行环境为MATLAB R2021B,采用蜜蜂优化算法对CNN进行优化,即采用蜜蜂优化算法拟合CNN的权重和偏差。

部分代码如下:

%% Cleaning
 clear;
 clc;
 warning('off');
%% CNN Deep Neural Network
% Load the deep sample data as an image datastore. 
deepDatasetPath = fullfile('CNNDat');
imds = imageDatastore(deepDatasetPath, ...
    'IncludeSubfolders',true, ...
    'LabelSource','foldernames');
% Divide the data into training and validation data sets
numTrainFiles = 90;
[imdsTrain,imdsValidation] = splitEachLabel(imds,numTrainFiles,'randomize');
% Define the convolutional neural network architecture.
layers = [
% Image Input Layer An imageInputLayer 
    imageInputLayer([64 64 1])
% Convolutional Layer 
convolution2dLayer(3,8,'Padding','same')
% Batch Normalization 
    batchNormalizationLayer
% ReLU Layer The batch
    reluLayer
% Max Pooling Layer  
    % More values means less weights
    maxPooling2dLayer(4,'Stride',4)
    %------------------------------
    convolution2dLayer(3,8,'Padding','same')
    batchNormalizationLayer
    reluLayer
    maxPooling2dLayer(5,'Stride',5)
    convolution2dLayer(3,8,'Padding','same')
    batchNormalizationLayer
    reluLayer
% Fully Connected Layer (Number of Classes) 
    fullyConnectedLayer(8)
% Softmax Layer 
    softmaxLayer
% Classification Layer The final layer 
    classificationLayer];
% Specify the training options
options = trainingOptions('sgdm', ...
    'InitialLearnRate',0.001, ...
    'MaxEpochs',20, ...
    'Shuffle','every-epoch', ...
    'ValidationData',imdsValidation, ...
    'ValidationFrequency',8, ...
    'Verbose',false, ...
    'Plots','training-progress');
% Train the network 
[net,info]= trainNetwork(imdsTrain,layers,options);

出图如下:

工学博士,担任《Mechanical System and Signal Processing》审稿专家,担任
《中国电机工程学报》优秀审稿专家,《控制与决策》,《系统工程与电子技术》,《电力系统保护与控制》,《宇航学报》等EI期刊审稿专家。

擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1477331.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手机和windows的便签怎么共享账号使用

在忙碌的生活中,我经常需要在手机和电脑之间同步记事信息。可是,每次当我在手机上记下一些重要事项后,想要在电脑上查看或继续编辑时,总是遇到各种麻烦。因为手机和电脑上的便签软件各不相同,无法实现账号共享和内容同…

系统性学习vue-vue3

系统性学习vue-vue3 Vue3简介创建Vue3.0工程使用vue-cli创建使用vite创建工程 分析工程结构(cli创建的)main.jsApp.vue 安装开发者工具初识setupref函数处理基本类型处理对象类型 reactive函数回顾Vue2的响应式原理vue3响应式原理—Proxyreactive对比ref…

C++面试宝典第33题:数组组成最大数

题目 给定一组非负整数nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。 示例1: 输入:nums = [10, 2] 输出:"210" 示例2: 输入:nums = [3, 30, 34, 5, 9] 输出:"…

开发一款跨境电商APP的流程是什么

开发一款跨境电商系统的流程大致如下: 1.需求分析:这是开发任何软件系统的第一步。在这个阶段,你需要与客户进行深入沟通,了解他们的业务模式、目标用户、产品特点以及竞争对手等信息。通过这一步骤,你可以确定系统的…

报`Uncaught (in promise) TypeError: NetworkError when attempting to fetch resource.`错误解决办法

使用了promise,但是在使用的过程中报Uncaught (in promise)错误,第一次遇到这种错误,所以在此记录下,方便以后解决问题 Uncaught (in promise) TypeError: NetworkError when attempting to fetch resource.错误通常出现在使用fetch API发起…

pytorch 图像数据集管理

目录 1.数据集的管理说明 2.数据集Dataset类说明 3.图像分类常用的类 ImageFolder 1.数据集的管理说明 pytorch使用Dataset来管理训练和测试数据集,前文说过 torchvision.datasets.MNIST 这些 torchvision.datasets里面的数据集都是继承Dataset而来&#xff0c…

【QT+QGIS跨平台编译】之五十六:【QGIS_CORE跨平台编译】—【qgsmeshcalclexer.cpp生成】

文章目录 一、Flex二、生成来源三、构建过程一、Flex Flex (fast lexical analyser generator) 是 Lex 的另一个替代品。它经常和自由软件 Bison 语法分析器生成器 一起使用。Flex 最初由 Vern Paxson 于 1987 年用 C 语言写成。 “flex 是一个生成扫描器的工具,能够识别文本中…

【Python笔记-设计模式】状态模式

一、说明 状态模式是一种行为设计模式,用于解决对象在不同状态下具有不同行为 (一) 解决问题 在对象行为根据对象状态而改变时,规避使用大量的条件语句来判断对象的状态,提高系统可维护性 (二) 使用场景 当对象的行为取决于其状态&#…

vue 部署后修改配置文件(接口IP)

近期,有一个项目,运维在部署的时候,接口ip还没有确定,而且ip后面的路径一直有变动,导致我这里一天打包至少四五次才行,很麻烦,然后看了下有没有打包后修改配置文件修改接口ip的方法,…

kubectl使用及源码阅读

目录 概述实践样例yaml 中的必须字段 kubectl 代码原理kubectl 命令行设置pprof 抓取火焰图kubectl 中的 cobra 七大分组命令kubectl createcreateCmd中的builder模式createCmd中的visitor访问者模式外层VisitorFunc分析 结束 概述 k8s 版本 v1.24.16 kubectl的职责 1.主要的…

深入理解网络通信基本原理和tcp/ip协议

深入理解网络通信基本原理和tcp/ip协议 一、计算机网络体系1,计算机网络体系结构2,网络中数据传输2.1,浏览器中输入一个url的执行流程2.2,数据在网络中是的传输流程 3,三次握手和四次挥手3.1,三次握手3.1.1…

代理IP安全问题:在国外使用代理IP是否安全

目录 前言 一、国外使用代理IP的安全风险 1. 数据泄露 2. 恶意软件 3. 网络攻击 4. 法律风险 二、保护国外使用代理IP的安全方法 1. 选择可信的代理服务器 2. 使用加密协议 3. 定期更新系统和软件 4. 注意网络安全意识 三、案例分析 总结 前言 在互联网时代&…

xilinix 的硬件资源分布

从官方手册UG475中可以看出,下图中的V690T系列的i芯片,其具有的bank数量,已经上下半区的bufg对应的bank关系,实际在开发过程中,可能面临局部资源集中度过高,导致bufg的数量不够的情况,bufg的位置…

Docker数据集与自定义镜像:构建高效容器的关键要素

目录 博客前言 一.数据卷 1.数据卷介绍 2.实战 宿主机和容器共享目录 容器和容器之间共享目录 二.自定义镜像 1.自定义镜像介绍 2.实战 2.1自定义centos,具备vim及ifconfig作用 构建镜像 通过镜像运行一个容器进行测试 2.2自定义tomact(文件为…

人工智能_Centos7.9中CPU安装ChatGLM3-6B大模型_安装使用_010---人工智能工作笔记0105

从一个空的虚拟机开始安装: https://www.modelscope.cn/models/ZhipuAI/chatglm3-6b/files 可以看到这里有很多的数据文件,那么这里 这里点击模型文件就可以下载,这个就是chatglm3-6B的文件,需要点击每个文件,然后点击右边的下载,把文件都下载下来

Python3中真真假假True、False、None等含义详解

在Python中,不仅仅和类C一样的真假类似,比如1代表真,0代表假。Python中的真假有着更加广阔的含义范围,Python会把所有的空数据结构视为假,比如 [] (空列表)、 {} (空集合)、 (空字符…

初探2b blender

总结 按照youtube 教程 做了个雏形 心得 从正面, 侧面 视图整体上调整外轮廓流线型趋向, 比如正面看这个发型像个鸡蛋的外轮廓头发重要的是丝滑, 流畅 集束 层次 交错

Flutter开发进阶之Flutter Web加载速度优化

Flutter开发进阶之Flutter Web加载速度优化 通常使用Flutter开发的web加载速度会比较慢,原因是Flutter web需要加载的资源处于国外,以下是据此所做的相应优化。 一、FlutterWeb打包 flutter build web --web-renderer canvaskit使用新命令打包 flut…

面试经典150题——插入区间

"The future belongs to those who believe in the beauty of their dreams." - Eleanor Roosevelt 1. 题目描述 2. 题目分析与解析 2.1 思路一 解决这个问题的思路是基于区间排序和合并的经典算法。这个问题的关键在于如何处理新区间与现有区间的关系&#xff0c…

【C++入门】C++关键字 | 命名空间 | C++的输入输出

目录 0.C与C 1.C的关键字 2.命名空间 2.1域 2.2C中命名冲突问题 2.3命名空间定义 2.4命名空间使用 2.5命令空间的展开&头文件的展开 3.C的输入&输出 3.1cout&cin 3.1<<流插入运算符 3.2>>流提取运算符 0.C与C C是在C的基础之上&#xff…