分类预测 | MATLAB实现CNN-BiGRU-Attention多输入分类预测

分类预测 | MATLAB实现CNN-BiGRU-Attention多输入单输出分类预测

目录

    • 分类预测 | MATLAB实现CNN-BiGRU-Attention多输入单输出分类预测
      • 预测效果
      • 基本介绍
      • 模型描述
      • 程序设计
      • 参考资料

预测效果

1
2

3
4
5

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

基本介绍

Matlab实现CNN-BiGRU-Attention多特征分类预测,卷积双向门控循环单元结合注意力机制分类预测。
1.data为数据集,格式为excel,12个输入特征,输出4类标签;
2.MainCNN_BiGRU_AttentionNC.m为主程序文件,运行即可;
3.可视化展示分类准确率,可在下载区获取数据和程序内容;
注意程序和数据放在一个文件夹,运行环境为Matlab2020b及以上。

模型描述

注意力机制模块:
SEBlock(Squeeze-and-Excitation Block)是一种聚焦于通道维度而提出一种新的结构单元,为模型添加了通道注意力机制,该机制通过添加各个特征通道的重要程度的权重,针对不同的任务增强或者抑制对应的通道,以此来提取有用的特征。该模块的内部操作流程如图,总体分为三步:首先是Squeeze 压缩操作,对空间维度的特征进行压缩,保持特征通道数量不变。融合全局信息即全局池化,并将每个二维特征通道转换为实数。实数计算公式如公式所示。该实数由k个通道得到的特征之和除以空间维度的值而得,空间维数为H*W。其次是Excitation激励操作,它由两层全连接层和Sigmoid函数组成。如公式所示,s为激励操作的输出,σ为激活函数sigmoid,W2和W1分别是两个完全连接层的相应参数,δ是激活函数ReLU,对特征先降维再升维。最后是Reweight操作,对之前的输入特征进行逐通道加权,完成原始特征在各通道上的重新分配。

在这里插入图片描述

程序设计

  • 完整程序和数据获取方式1:同等价值程序兑换;
  • 完整程序和数据获取方式2:私信博主回复 CNN-BiGRU-Attention多输入分类预测获取。
%%  划分训练集和测试集
P_train = res(1: num_train_s, 1: f_)';
T_train = res(1: num_train_s, f_ + 1: end)';
M = size(P_train, 2);P_test = res(num_train_s + 1: end, 1: f_)';
T_test = res(num_train_s + 1: end, f_ + 1: end)';
N = size(P_test, 2);%%  数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);%%  数据平铺
%   将数据平铺成1维数据只是一种处理方式
%   也可以平铺成2维数据,以及3维数据,需要修改对应模型结构
%   但是应该始终和输入层数据结构保持一致
p_train =  double(reshape(p_train, f_, 1, 1, M));
p_test  =  double(reshape(p_test , f_, 1, 1, N));
t_train =  double(t_train)';
t_test  =  double(t_test )';%%  数据格式转换
for i = 1 : MLp_train{i, 1} = p_train(:, :, 1, i);
endfor i = 1 : NLp_test{i, 1}  = p_test( :, :, 1, i);
end%%  建立模型
lgraph = layerGraph();                                                 % 建立空白网络结构tempLayers = [sequenceInputLayer([f_, 1, 1], "Name", "sequence")                 % 建立输入层,输入数据结构为[f_, 1, 1]sequenceFoldingLayer("Name", "seqfold")];                          % 建立序列折叠层
lgraph = addLayers(lgraph, tempLayers);                                % 将上述网络结构加入空白结构中tempLayers = convolution2dLayer([3, 1], 32, "Name", "conv_1");         % 卷积层 卷积核[3, 1] 步长[1, 1] 通道数 32
lgraph = addLayers(lgraph,tempLayers);                                 % 将上述网络结构加入空白结构中
%% 赋值
L2Regularization =abs(optVars(1)); % 正则化参数
InitialLearnRate=abs(optVars(2)); % 初始学习率
NumOfUnits = abs(round(optVars(3))); % 隐藏层节点数%%  输入和输出特征个数
inputSize    = size(input_train, 1);   %数据输入x的特征维度
numResponses = size(output_train, 1);   %数据输出y的维度%%  设置网络结构
opt.layers = [ ...sequenceInputLayer(inputSize)     %输入层,参数是输入特征维数%%  设置网络参数
opt.options = trainingOptions('adam', ...             % 优化算法Adam'MaxEpochs', 100, ...                            % 最大训练次数,推荐180'GradientThreshold', 1, ...                      %梯度阈值,防止梯度爆炸'ExecutionEnvironment','cpu',...   %对于大型数据集合、长序列或大型网络,在 GPU 上进行预测计算通常比在 CPU 上快。其他情况下,在 CPU 上进行预测计算通常更快。'InitialLearnRate', InitialLearnRate, ... % 初始学习率'LearnRateSchedule', 'piecewise', ...             % 学习率调整'LearnRateDropPeriod',120, ...                   % 训练80次后开始调整学习率'LearnRateDropFactor',0.2, ...                  % 指定初始学习率 0.005,在 100 轮训练后通过乘以因子 0.2 来降低学习率。'L2Regularization', L2Regularization, ...       % 正则化参数'Verbose', 0, ...                                 % 关闭优化过程'Plots', 'none');                                 % 不画出曲线 

参考资料

[1] https://blog.csdn.net/kjm13182345320/article/details/129679476?spm=1001.2014.3001.5501
[2] https://blog.csdn.net/kjm13182345320/article/details/129659229?spm=1001.2014.3001.5501
[3] https://blog.csdn.net/kjm13182345320/article/details/129653829?spm=1001.2014.3001.5501

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

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

相关文章

解决“先commit再pull”造成的git冲突

一、问题场景 在分支上修改了代码然后commit(没有push),此时再git pull,拉下了别人的修改,但是报错无法merge 二、解决步骤 1.在idea下方工具栏选择git -> log,可以看到版本变化链表,右键…

【文件上传】大文件分片上传、断点续传、秒传前后端实现

1、大文件上传面临的问题: 在传统的文件上传中,由于文件过大,导致网络传输时间长,这过程中会遇到网络不稳定或者不小心关闭的浏览器(电脑)的情况,从而导致文件上传中断。中断之后,又…

题解:ABC277C - Ladder Takahashi

题解:ABC277C - Ladder Takahashi 题目 链接:Atcoder。 链接:洛谷。 难度 算法难度:普及。 思维难度:入门。 调码难度:入门。 综合评价:简单。 算法 深度优先搜索简单图论 思路 把每…

【Apollo】赋能移动性:阿波罗自动驾驶系统的影响

前言 Apollo (阿波罗)是一个开放的、完整的、安全的平台,将帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统,快速搭建一套属于自己的自动驾驶系统。 开放能力、共享资源、加速创新、持续共赢是 Apollo 开放平台的口号。百度把自己所拥有的强大、…

动态内存分配及管理——C语言

目录 一、为什么存在动态内存分配 二、动态内存函数介绍 2.1 malloc 2.2 free 2.3 calloc 2.4 realloc 三、常见的动态内存错误 3.1 对NULL指针的解引用操作 3.2 对动态开辟空间的越界访问 3.3 对非动态开辟内存使用free释放 3.4 使用free释放一块动态开辟内存的一部…

搭建Web服务器并用cpolar发布至公网访问

本地电脑搭建Web服务器并用cpolar发布至公网访问 文章目录 本地电脑搭建Web服务器并用cpolar发布至公网访问前言1. 首先在电脑安装PHPStudy、WordPress、cpolar2. 安装cpolar,进入Web-UI界面3. 安装wordpress4. 进入wordpress网页安装程序5. 利用cpolar建立的内网穿…

TensorFlow2.1 模型训练使用

文章目录 1、环境安装搭建2、神经网络2.1、解决线性问题2.2、FAshion MNIST数据集使用 3、卷积神经网络3.1、卷积神经网络使用3.2、ImageDataGenerator使用3.3、猫狗识别案例3.4、参数优化 1、环境安装搭建 链接: Windows 安装Tensorflow2.1、Pycharm开发环境 2、神经网络 1…

【数据结构】堆(Heap)

一、堆的概念及结构 1、概念 堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵 完全二叉树的 数组对象。 堆是非线性数据结构,相当于一维数组,有两个直接后继。 如果有一个关键码的集合K { k₀,k₁&#xff0c…

“深入解析JVM:探索Java虚拟机的内部工作原理“

标题:深入解析JVM:探索Java虚拟机的内部工作原理 摘要:本文将深入解析Java虚拟机(JVM)的内部工作原理,包括类加载、内存管理、垃圾回收、即时编译等关键概念。通过对这些概念的详细讲解和示例代码的演示&a…

关于openfeign调用时content-type的问题

问题1描述: 今天在A服务使用openfeign调用B服务的时候,发现经常会偶发性报错。错误如下: 情况为偶发,很让人头疼。 两个接口如下: A服务接口: delayReasonApi.test(student);就是使用openfeign调用B服务的…

K8S常用命令

1.1 查看集群信息: kubectl cluster-info: 显示集群信息。 kubectl config view: 显示当前kubectl配置信息。1.2 查看资源状态: kubectl get pods: 查看所有Pod的状态。 kubectl get deployments: 查看所有部署的状态。 kubectl get services: 查看所有…

Php“牵手”shopee商品详情页数据采集方法,shopeeAPI接口申请指南

shopee详情接口 API 是开放平台提供的一种 API 接口,它可以帮助开发者获取商品的详细信息,包括商品的标题、描述、图片等信息。在电商平台的开发中,详情接口API是非常常用的 API,因此本文将详细介绍详情接口 API 的使用。 一、sh…

Python接口自动化之request请求封装

我们在做自动化测试的时候,大家都是希望自己写的代码越简洁越好,代码重复量越少越好。那么,我们可以考虑将request的请求类型(如:Get、Post、Delect请求)都封装起来。这样,我们在编写用例的时候…

Python文件操作教程,Python文件操作笔记

文件的打开与关闭 想一想: 如果想用word编写一份简历,应该有哪些流程呢? 打开word软件,新建一个word文件写入个人简历信息保存文件关闭word软件 同样,在操作文件的整体过程与使用word编写一份简历的过程是很相似的…

爬虫逆向实战(十三)--某课网登录

一、数据接口分析 主页地址:某课网 1、抓包 通过抓包可以发现登录接口是user/login 2、判断是否有加密参数 请求参数是否加密? 通过查看“载荷”模块可以发现有一个password加密参数,还有一个browser_key这个可以写死不需要关心 请求头…

【11】Redis学习笔记 (微软windows版本)【Redis】

注意:官redis方不支持windows版本 只支持linux 此笔记是依托微软开发windows版本学习 一、前言 Redis简介: Redis(Remote Dictionary Server)是一个开源的内存数据结构存储系统,它也被称为数据结构服务器。Redis以键值对&am…

取证的学习

Volatility命令语法 1.判断镜像信息,获取操作系统类型 Volatility -f xxx.vmem imageinfo 在查到操作系统后如果不确定可以使用以下命令查看 volatility - f xxx.vmem --profile [操作系统] volshell 2.知道操作系统类型后,用–profile指定 volat…

IO和文件系统性能分析工具

以下内容来自于RHEL 官方文档。以下工具可以用来分析磁盘 IO 和文件系统性能瓶颈。 分析方法见 《性能分析方法-《性能之巅》笔记》,USE 法必须要使用相关性能分析工具。 影响 IO 和文件系统性能的主要因素: 数据写入或读取特征 顺序或随机 buffered 或…

基于ssm+mysql智能图书馆导航系统设计与实现

摘 要 电脑的出现是一个时代的进步,不仅仅帮助人们解决了一些数学上的难题,如今电脑的出现,更加方便了人们在工作和生活中对于一些事物的处理。应用的越来越广泛,通过互联网我们可以更方便地进行办公,也能够在网上就能…

【Oracle 数据库 SQL 语句 】积累1

Oracle 数据库 SQL 语句 1、分组之后再合计2、显示不为空的值 1、分组之后再合计 关键字: grouping sets ((分组字段1,分组字段2),()) select sylbdm ,count(sylbmc) a…