【BiLSTM分类】注意力机制的卷积神经网络结合双向长短记忆神经网络CNN-BiLSTM-attention数据分类【含Matlab源码 3909期】

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

⛄一、注意力机制的卷积神经网络结合双向长短记忆神经网络CNN-BiLSTM-attention

1 卷积神经网络
1.1 卷积神经网络各个层级结构图
在这里插入图片描述
上图中CNN要做的事情是:给定一张图片,是车还是马未知,是什么车也未知,现在需要模型判断这张图片里具体是一个什么东西,总之输出一个结果:如果是车 那是什么车

所以
最左边是数据输入层,对数据做一些处理,比如去均值(把输入数据各个维度都中心化为0,避免数据过多偏差,影响训练效果)、归一化(把所有的数据都归一到同样的范围)、PCA/白化等等。CNN只对训练集做“去均值”这一步。

中间是
CONV:卷积计算层,线性乘积 求和。
RELU:激励层,上文2.2节中有提到:ReLU是激活函数的一种。
POOL:池化层,简言之,即取区域平均或最大。

最右边是
FC:全连接层
这几个部分中,卷积计算层是CNN的核心,下文将重点阐述。

1.2 CNN之卷积计算层
1.2.1 CNN怎么进行识别
简言之,当我们给定一个"X"的图案,计算机怎么识别这个图案就是“X”呢?一个可能的办法就是计算机存储一张标准的“X”图案,然后把需要识别的未知图案跟标准"X"图案进行比对,如果二者一致,则判定未知图案即是一个"X"图案。

而且即便未知图案可能有一些平移或稍稍变形,依然能辨别出它是一个X图案。如此,CNN是把未知图案和标准X图案一个局部一个局部的对比,如下图所示
在这里插入图片描述
而未知图案的局部和标准X图案的局部一个一个比对时的计算过程,便是卷积操作。卷积计算结果为1表示匹配,否则不匹配。

具体而言,为了确定一幅图像是包含有"X"还是"O",相当于我们需要判断它是否含有"X"或者"O",并且假设必须两者选其一,不是"X"就是"O"。
在这里插入图片描述
理想的情况就像下面这个样子:
在这里插入图片描述
标准的"X"和"O",字母位于图像的正中央,并且比例合适,无变形

对于计算机来说,只要图像稍稍有一点变化,不是标准的,那么要解决这个问题还是不是那么容易的:
在这里插入图片描述
计算机要解决上面这个问题,一个比较天真的做法就是先保存一张"X"和"O"的标准图像(就像前面给出的例子),然后将其他的新给出的图像来和这两张标准图像进行对比,看看到底和哪一张图更匹配,就判断为哪个字母。

但是这么做的话,其实是非常不可靠的,因为计算机还是比较死板的。在计算机的“视觉”中,一幅图看起来就像是一个二维的像素数组(可以想象成一个棋盘),每一个位置对应一个数字。在我们这个例子当中,像素值"1"代表白色,像素值"-1"代表黑色。
在这里插入图片描述
当比较两幅图的时候,如果有任何一个像素值不匹配,那么这两幅图就不匹配,至少对于计算机来说是这样的。

对于这个例子,计算机认为上述两幅图中的白色像素除了中间的3*3的小方格里面是相同的,其他四个角上都不同:
在这里插入图片描述
因此,从表面上看,计算机判别右边那幅图不是"X",两幅图不同,得出结论:
在这里插入图片描述
但是这么做,显得太不合理了。理想的情况下,我们希望,对于那些仅仅只是做了一些像平移,缩放,旋转,微变形等简单变换的图像,计算机仍然能够识别出图中的"X"和"O"。就像下面这些情况,我们希望计算机依然能够很快并且很准的识别出来:
在这里插入图片描述
这也就是CNN出现所要解决的问题。

Features
在这里插入图片描述
对于CNN来说,它是一块一块地来进行比对。它拿来比对的这个“小块”我们称之为Features(特征)。在两幅图中大致相同的位置找到一些粗糙的特征进行匹配,CNN能够更好的看到两幅图的相似性,相比起传统的整幅图逐一比对的方法。

每一个feature就像是一个小图(就是一个比较小的有值的二维数组)。不同的Feature匹配图像中不同的特征。在字母"X"的例子中,那些由对角线和交叉线组成的features基本上能够识别出大多数"X"所具有的重要特征。
在这里插入图片描述
这些features很有可能就是匹配任何含有字母"X"的图中字母X的四个角和它的中心。那么具体到底是怎么匹配的呢?如下:
在这里插入图片描述
看到这里是不是有了一点头目呢。但其实这只是第一步,你知道了这些Features是怎么在原图上面进行匹配的。但是你还不知道在这里面究竟进行的是怎样的数学计算,比如这个下面3*3的小块到底干了什么?
在这里插入图片描述
这里面的数学操作,就是我们常说的“卷积”操作。接下来,我们来了解下什么是卷积操作。

1.2.2 什么是卷积
对图像(不同的数据窗口数据)和滤波矩阵(一组固定的权重:因为每个神经元的多个权重固定,所以又可以看做一个恒定的滤波器filter)做内积(逐个元素相乘再求和)的操作就是所谓的『卷积』操作,也是卷积神经网络的名字来源。

非严格意义上来讲,下图中红框框起来的部分便可以理解为一个滤波器,即带着一组固定权重的神经元。多个滤波器叠加便成了卷积层。

2 注意力机制
注意力机制是一种模拟人类注意力分配的机制,它在深度学习中被广泛应用于各种任务,如机器翻译、语音识别和图像处理等。其原理可以简单概括为:根据输入的不同部分对输出的贡献程度进行加权,从而使模型能够更加关注重要的信息。

具体来说,注意力机制通过计算输入序列中每个位置的权重,然后将这些权重与对应位置的特征进行加权求和,得到最终的输出。这个权重计算过程通常包括以下几个步骤:

(1)计算注意力分数:通过将输入序列中的每个位置与当前的上下文进行比较,计算出每个位置与当前上下文的相关性得分。常用的计算方法包括点积注意力、加性注意力和缩放点积注意力等。

(2)归一化注意力权重:将注意力分数进行归一化处理,使得它们的总和等于1。这可以通过应用softmax函数来实现。

(3)加权求和:将归一化后的注意力权重与对应位置的特征进行加权求和,得到最终的上下文向量。这个上下文向量会被传递给下一个阶段的模型进行进一步处理。

通过注意力机制,模型可以根据输入的不同部分的重要性动态地调整权重,从而更加准确地捕捉到关键信息。这种机制使得模型能够在处理长序列或复杂任务时更加有效和灵活。

3 注意力机制的卷积神经网络结合双向长短记忆神经网络CNN-BiLSTM-attention
CNN-BiLSTM-attention是一种结合了卷积神经网络(CNN)、双向长短记忆神经网络(BiLSTM)和注意力机制的模型,用于处理自然语言处理任务,如文本分类、情感分析等。

该模型的原理如下:
(1)卷积神经网络(CNN):CNN主要用于提取文本中的局部特征。它通过滑动窗口的方式,将文本分成多个窗口,并使用卷积操作提取每个窗口的特征。这些特征可以捕捉到文本中的局部信息。
(2)双向长短记忆神经网络(BiLSTM):BiLSTM用于捕捉文本中的上下文信息。它由两个LSTM组成,一个按正序处理输入序列,一个按逆序处理输入序列。这样可以同时考虑到当前位置的前后上下文信息。
(3)注意力机制(Attention):注意力机制用于对不同位置的特征进行加权,以便更关注对当前任务有用的信息。在CNN-BiLSTM-attention模型中,注意力机制可以根据任务需求,自动学习到不同位置的重要性权重,从而提高模型的表达能力。

具体实现步骤如下:
(1)输入文本经过词嵌入层,将每个词转换为向量表示。
(2)CNN层对词向量进行卷积操作,提取局部特征。
(3)BiLSTM层对卷积层的输出进行处理,捕捉上下文信息。
(4)注意力机制根据BiLSTM的输出,计算每个位置的注意力权重。
(5)将注意力权重与BiLSTM的输出进行加权求和,得到最终的表示。
(6)最后可以接上全连接层等其他层进行具体任务的处理,如分类、回归等。

⛄二、部分源代码

%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行

%% 读取数据
res = xlsread(‘数据集.xlsx’);

%% 分析数据
num_class = length(unique(res(:, end))); % 类别数(Excel最后一列放类别)
num_dim = size(res, 2) - 1; % 特征维度
num_res = size(res, 1); % 样本数(每一行,是一个样本)
num_size = 0.7; % 训练集占数据集的比例
res = res(randperm(num_res), 😃; % 打乱数据集(不打乱数据时,注释该行)
flag_conusion = 1; % 标志位为1,打开混淆矩阵(要求2018版本及以上)

%% 设置变量存储数据
P_train = []; P_test = [];
T_train = []; T_test = [];

%% 划分数据集
for i = 1 : num_class
mid_res = res((res(:, end) == i), 😃; % 循环取出不同类别的样本
mid_size = size(mid_res, 1); % 得到不同类别样本个数
mid_tiran = round(num_size * mid_size); % 得到该类别的训练样本个数

P_train = [P_train; mid_res(1: mid_tiran, 1: end - 1)];       % 训练集输入
T_train = [T_train; mid_res(1: mid_tiran, end)];              % 训练集输出

P_test  = [P_test; mid_res(mid_tiran + 1: end, 1: end - 1)];  % 测试集输入
T_test  = [T_test; mid_res(mid_tiran + 1: end, end)];         % 测试集输出

end

%% 数据转置
P_train = P_train’; P_test = P_test’;
T_train = T_train’; T_test = T_test’;

%% 得到训练集和测试样本个数
M = size(P_train, 2);
N = size(P_test , 2);

%% 数据归一化
[P_train, ps_input] = mapminmax(P_train, 0, 1);
P_test = mapminmax(‘apply’, P_test, ps_input);

t_train = categorical(T_train)‘;
t_test = categorical(T_test )’;

%% 数据平铺
% 将数据平铺成1维数据只是一种处理方式
% 也可以平铺成2维数据,以及3维数据,需要修改对应模型结构
% 但是应该始终和输入层数据结构保持一致
P_train = double(reshape(P_train, num_dim, 1, 1, M));
P_test = double(reshape(P_test , num_dim, 1, 1, N));

%% 数据格式转换
for i = 1 : M
p_train{i, 1} = P_train(:, :, 1, i);
end

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]张立峰,刘 旭.基于 CNN-GRU 神经网络的短期负荷预测[J].电力科学与工 程. 2020年11月

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

🍅 仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

  • 18
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值