分类预测 | Matlab实现CNN-LSTM-Attention高光谱数据分类

article/2025/8/4 21:16:20

分类预测 | Matlab实现CNN-LSTM-Attention高光谱数据分类

目录

    • 分类预测 | Matlab实现CNN-LSTM-Attention高光谱数据分类
      • 分类效果
      • 功能概述
      • 程序设计
      • 参考资料

分类效果

在这里插入图片描述

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

在这里插入图片描述

功能概述

代码功能
该MATLAB代码实现了一个结合CNN、LSTM和注意力机制的高光谱数据分类模型,核心功能如下:

数据预处理

固定划分训练集(前705条)和测试集

特征归一化(mapminmax到[-1,1]区间)

数据重塑为LSTM所需的序列格式(num_dim×1×1的单元数组)

混合模型架构

在这里插入图片描述

核心模块

CNN模块:2个卷积层(32/64个滤波器)+ BN + ReLU + 最大池化

LSTM+Attention:128单元LSTM → 多头自注意力层(4头,16键维度)→ Dropout(0.3)

分类头:全连接层 + Softmax

训练与评估

优化器:Adam(初始LR=0.001,分段衰减)

正则化:L2(0.001) + Dropout

评估指标:准确率 + 混淆矩阵 + 预测对比图

特征可视化:t-SNE降维(优化perplexity/lr)

创新可视化

注意力层特征提取 → PCA(50) → t-SNE(2D)

参数网格搜索(perplexity=195, lr=270)

综合评分 = 0.7×轮廓系数 + 0.3×中心聚集度


在这里插入图片描述

在这里插入图片描述
技术亮点
混合架构优势

CNN提取局部空间特征 → LSTM捕获时序依赖 → 注意力聚焦关键波段

防过拟合设计

Dropout(0.3) + L2正则化 + 早停机制(验证集监控)

可视化创新

动态参数优化:自动选择最佳t-SNE参数组合

综合评分指标:结合聚类质量(轮廓系数)和特征紧密度(中心聚集)

工程实践

数据泄露防护:使用训练集归一化参数处理测试集

可重复性:rng(0)固定随机种子

高效特征提取:activations()直接获取注意力层输出

高光谱数据预处理

MSC (Multiplicative Scatter Correction) 是高光谱数据预处理的核心技术(Matlab代码不含此功能),主要用于消除光散射效应:
在这里插入图片描述

在这里插入图片描述

程序设计

  • 完整程序和数据私信博主回复Matlab实现CNN-LSTM-Attention高光谱数据分类

.rtcContent { padding: 30px; } .lineNode {font-size: 10pt; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-style: normal; font-weight: normal; }
%%  清空环境变量
warning off             % 关闭报警信息
close all               % 关闭开启的图窗
clear                   % 清空变量
clc                     % 清空命令行
rng('default');
%% 导入数据
res = xlsread('data.xlsx'); 
.rtcContent { padding: 30px; } .lineNode {font-size: 10pt; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-style: normal; font-weight: normal; }
%% 网络架构
layers = [sequenceInputLayer([num_dim 1 1], 'Name','input')sequenceFoldingLayer('Name','fold')% ============== CNN模块 ==============convolution2dLayer([3 1],32, 'Padding','same', 'Name','conv1')batchNormalizationLayer('Name','bn1')reluLayer('Name','relu1')maxPooling2dLayer([2 1], 'Padding','same', 'Name','pool1')convolution2dLayer([3 1],64, 'Padding','same', 'Name','conv2')batchNormalizationLayer('Name','bn2')reluLayer('Name','relu2')maxPooling2dLayer([2 1], 'Padding','same', 'Name','pool2')% ====================================sequenceUnfoldingLayer('Name','unfold')flattenLayer('Name','flatten')% ========== LSTM+注意力模块 ==========lstmLayer(128, 'OutputMode','last', 'Name','lstm')  selfAttentionLayer(4,16, 'Name','attention')       dropoutLayer(0.3, 'Name','dropout')% ====================================, x, refValue_norm); % 调用SHAP函数
end

参考资料

[1] https://blog.csdn.net/kjm13182345320/article/details/129036772?spm=1001.2014.3001.5502
[2] https://blog.csdn.net/kjm13182345320/article/details/128690229


http://www.hkcw.cn/article/majslPSlbk.shtml

相关文章

嵌入式项目之mini2440系统制作烧写

系统移植的必要性与组成 在嵌入式开发中,**系统移植(Linux 系统定制)** 是常见的需求,主要原因在于: 1. **官方镜像体积过大**:标准 Linux 发行版(如 Ubuntu)可能占用数 GB 存储…

OpenShift AI - 启用过时版本的 Notebook 镜像

《OpenShift / RHEL / DevSecOps 汇总目录》 说明:本文已经在 OpenShift 4.18 OpenShift AI 2.19 的环境中验证 文章目录 查看可用 Notebook 镜像控制台查看命令行查看 Notebook 镜像和 Image Stream 对应关系启用老版本的 Notebook 镜像参考 查看可用 Notebook 镜…

“人单酬“理念:财税行业的自我驱动革命

引言:当薪酬不再是"固定数字",而是"成长标尺" "为什么有人拼命工作却收入停滞?为什么企业总在人才流失中挣扎?"这些问题背后,往往隐藏着传统薪酬体系的僵化。而"人单酬"&…

yolo目标检测助手:具有模型预测、图像标注功能

在人工智能浪潮席卷各行各业的今天,计算机视觉模型(如 YOLO)已成为目标检测领域的标杆。然而,模型的强大能力需要直观的界面和便捷的工具才能充分发挥其演示、验证与迭代优化的价值。为此,我开发了一款基于 WPF 的桌面…

Spring Ai 从Demo到搭建套壳项目(一)初识与实现与deepseek对话模式

前言 为什么说Java长青,主要是因为其生态圈完善,Spring又做了一款脚手架,把对接各个LLM厂商的sdk做了一遍,形成一系列的spring-ai-starter-** 的依赖。 目前为止版本去到1.0.0.M6,golang跟不上了吧, Make …

机器学习实验七--SVM垃圾邮件分类器

SVM垃圾邮件分类器 一、什么是SVM二、实例:垃圾邮件分类器1.实验要求2.原理解释2.1 数据预处理流程2.2 特征提取方法2.3 SVM分类器 3.代码实现4.实验结果5.实验总结 一、什么是SVM 支持向量机(Support Vector Machine, SVM)是一种监督学习算法,主要用于…

lidar和imu的标定(一)Robust Real-time LiDAR-inertial Initialization

一、Robust Real-time LiDAR-inertial Initialization 看了这篇文章。在方法中,A和B都不细看了。主要看后边的几个部分。 C. LiDAR-inertial Initialization 在这一部分中, 1) Data Preprocess:主要是准备数据。 1.雷达里程计之后,可以得…

【手写系列】手写线程池

PS&#xff1a;本文的线程池为演示 Demo&#xff0c;皆在理解线程池的工作原理&#xff0c;并没有解决线程安全问题。 最简单一版的线程池 public class MyThreadPool {// 存放线程&#xff0c;复用已创建的线程List<Thread> threadList new ArrayList<>();publ…

Git企业级项目管理实战

目录 1. 准备工作 2. 添加成员 2.1 添加企业成员 2.2 添加项目成员 2.3 添加仓库开发人员 3. 开发场景 - 基于git flow模型的实践 3.1 新需求加入 3.2 修复测试环境 Bug 3.3 修改预发布环境Bug 3.4 修改正式环境 Bug 3.5 紧急修复正式环境 Bug 4. 拓展阅读 4.1 其…

go环境配置

下载对应版本的 go 版本 https://go.dev/dl/ 配置 vim ~/.zshrc export GOROOT/usr/local/go export PATH$PATH:$GOROOT/binsource ~/.zshrc >>>>>> go versiongoland 配置&#xff1a; &#x1f50d; 一、什么是GOPATH&#xff1f; GOPATH 是旧的项目结…

MySql(十二)

目录 MySql约束 1.添加主键约束 语法格式 1&#xff09;创建一个带主键的表 查看表结构 2&#xff09;创建表的时候指定主键名称 查看表结构 3&#xff09;创建一个表然后&#xff0c;然后再使用alter为列添加主键 查看表结构 4&#xff09;为表添加数据 1---正常数据 2---主键…

chrome.runtime.sendMessage 和 new FormData()

chrome.runtime.sendMessage 是Chrome扩展程序API中的一个方法&#xff0c;可用于背景脚本和内容脚本之间的消息传递。 new FormData() 提供了一种方便的方式来构建表单数据集。 在Chrome插件中&#xff0c;在 background.js 和 content.js 进行通信时使用了使用new FormData()…

数据结构-排序-排序的七种算法(2)

一&#xff0c;七种算法的介绍和比较 二&#xff0c;冒泡排序 原理&#xff1a;重复遍历列表&#xff0c;比较相邻元素&#xff0c;如果顺序错误就交换它们 时间复杂度&#xff1a; 最好&#xff1a;O(n)&#xff08;已有序时&#xff09; 平均&#xff1a;O(n) 最坏&#x…

【目标检测】backbone究竟有何关键作用?

backbone的核心在于能为检测提供若干种感受野大小和中心步长的组合&#xff0c;以满足对不同尺度和类别的目标检测。

JAVA实战开源项目:精简博客系统 (Vue+SpringBoot) 附源码

本文项目编号 T 215 &#xff0c;文末自助获取源码 \color{red}{T215&#xff0c;文末自助获取源码} T215&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

IO流1——体系介绍和字节输出流

什么是io流 io流分类 纯文本文件&#xff1a; windows自带的记事本打开能读懂的 经验证&#xff1a; word&#xff0c;excel不是&#xff0c; txt, md的是纯文本文件 &#xff01;&#xff01;&#xff01;&#xff01; 字节输出流 io流体系 抽象类不能直接创建他们的对象…

告别复杂操作!电脑极简风格计时使用

无论是工作、学习还是日常生活&#xff0c;这款小巧实用的计时工具都能成为你掌控时间的好帮手。特别适合需要频繁切换正计时、倒计时和查看当前时间的场景。界面简洁&#xff0c;操作便捷&#xff0c;助你高效管理每一刻。 这是一款免安装的工具&#xff0c;下载后可直接打开…

湖北理元理律师事务所:个人债务管理的温度与精度

湖北理元理律师事务所&#xff1a;个人债务管理的温度与精度 面对信用卡、网贷、医疗债等多重债务压力&#xff0c;普通人常陷入“拆东墙补西墙”的恶性循环。湖北理元理律师事务所通过计划集团公司服务平台&#xff0c;推出“有温度的债务优化计划”&#xff0c;其人性化设计…

启动你的RocketMQ之旅(七)-Store存储原理

前言&#xff1a; &#x1f44f;作者简介&#xff1a;我是笑霸final。 &#x1f4dd;个人主页&#xff1a; 笑霸final的主页2 &#x1f4d5;系列专栏&#xff1a;java专栏 &#x1f4e7;如果文章知识点有错误的地方&#xff0c;请指正&#xff01;和大家一起学习&#xff0c;一…

无标注数据如何提升LLM推理能力?熵最小化 提升LLM自信度

熵最小化 提升LLM自信度 ——熵最小化(Entropy Minimization,EM),如何在不使用任何标注数据的情况下,提升大语言模型(LLMs)在数学、物理和编程等复杂推理任务上的表现。 1. 什么是熵最小化? 熵在机器学习中衡量模型输出的不确定性。熵越小,模型对输出越“自信”(概率…