【SegRNN 源码理解】【今天不水文系列】编码器部分理解

我来小小的理解一下:

首先,16 batchsize,60sequendcelength,7 个特征的通俗解释

16 个独立的样本,每个样本有 60 个连续的时间步及对应的标签值,每个时间步有 60 个特征

所以就是因为样本是随机从训练集中采的,所以就假设采的是

样本 1,样本 6,样本 109,样本 334,样本 354等等等,一共 16 个(这就是 batchsize,表示一个 batch中容纳的样本数)

接下来,每个样本中连续的 60 个时间步,这个就很好理解了,但是这 60 个连续的时间步:

(0)样本 1:可能从第 7 个时间开始.....跟着 60 个,后面紧跟着要预测的 24 个时间步,dataloader 读数据时都封装好了,会对应上的

(1)样本 6:从第  38 个时间开始.....

(2)样本109:从第 1 个时间开始

......

(15)样本 334:从第 129 个时间开始

总之就是这样,然后每个时间有 7 个特征表示

接下来 16x60x7 --》 16×7×60

就是:

(0)样本 1:特征 1[60个连续的时间步],特征 2,特征 3,,,,,特征 7

(1)样本 6:特征 1,特征 2,特征 3,,,,,特征 7

(2)样本109:特征 1,特征 2,特征 3,,,,,特征 7

......

(15)样本 334:特征 1,特征 2,特征 3,,,,,特征 7

每个特征分别有 60 个连续的时间步

接下来呢,又开始对于这 60 个时间步,分段,分成 5 段,每段 12 个

然后呢,就把分出来的 段,12 维 统统喂到 linear 中,嵌入到 512 维,用的一个嵌入空间,所以嵌入时使用权值矩阵是一样的,毕竟得在同一个准则下才有可比性,这一步就是学习了每一个小段内,时间之间的相关关系

代码中搞事情:

它把样本batch 维度和特征维度,混到一起写,reshape 成(-1,seg_num_x,seg_dim)


(0)样本 1-特征 1 :【12】【12】【12】【12】【12】

(0)样本 1-特征 2 :【12】【12】【12】【12】【12】

....

(0)样本 1-特征 7 :【12】【12】【12】【12】【12】


(1)样本 6-特征 1 :【12】【12】【12】【12】【12】

(1)样本 6-特征 2 :【12】【12】【12】【12】【12】

....

(1)样本 6-特征 7 :【12】【12】【12】【12】【12】


(15)样本 334-特征 1 :【12】【12】【12】【12】【12】

(15)样本 334-特征 2 :【12】【12】【12】【12】【12】

....

(15)样本 334-特征 7 :【12】【12】【12】【12】【12】


也就是 112 条序列、、、 112×5×12

linear 就是把所有的 12 全部嵌入到 512 维

112×5×512


(0)样本 1-特征 1 :【512】【512】【512】【512】【512】→ 5步GRU → hn[0,0]

(0)样本 1-特征 2 :【512】【512】【512】【512】【512】→ 5步GRU → hn[0,1]

....

(0)样本 1-特征 7 :【512】【512】【512】【512】【512】→ 5步GRU → hn[0,6]


(1)样本 6-特征 1 :【512】【512】【512】【512】【512】→ 5步GRU → hn[0,7]

(1)样本 6-特征 2 :【512】【512】【512】【512】【512】→ 5步GRU → hn[0,8]

....

(1)样本 6-特征 7 :【512】【512】【512】【512】【512】


(15)样本 334-特征 1 :【512】【512】【512】【512】【512】

(15)样本 334-特征 2 :【512】【512】【512】【512】【512】

....

(15)样本 334-特征 7 :【512】【512】【512】【512】【512】→ 5步GRU → hn[0,111]


接下来 段内建模完了,那相邻段之间的时间的关系还没有建模呀,就把这些统统喂到 RNN 中,

RNN 把这个当做 5 个时间步,112 当成新的 batch,RNN 的 hiddensize 也设置成了 512(源码中写了),也就是 

单层 GRU(文中实际上用的 RNN 单元)

[序列 1] → 5步GRU → hn[0,0]
[序列 2] → 5步GRU → hn[0,1]
...
[序列 8] → 5步GRU → hn[0,7]
...
[序列 112] → 5步GRU → hn[0,111]

实际上这个 hn 应该是三维的,毕竟输入就是三维的,h_n.shape=1×112×512

应该是:

[序列 1] → hn[0, 0, :] - 批次0-特征0的最终隐藏状态
[序列 2] → hn[0, 1, :] - 批次0-特征1的最终隐藏状态
...
[序列 8] → hn[0, 7, :] - 批次1-特征0的最终隐藏状态
...
[序列 112] → hn[0, 111, :] - 批次15-特征6的最终隐藏状态

如果模型使用了多层GRU(例如num_layers=2),则隐藏状态的第一维将为2,我们会有:

  • hn[0,i,:] - 第一层GRU对序列i的最终隐藏状态
  • hn[1,i,:] - 第二层GRU对序列i的最终隐藏状态

但我们的num_layers=1

笑死,看了一天,居然觉得这么做也没啥不好的,习惯这个有点反常识的表示了。

传统 RNN 是:

16×60×7,其实就是:

(1)样本 6:从第  38 个时间开始..... → 60步GRU 建模  7 维 →hn[0,0] 512 维(融合了所有时间步信息的 512 维)

(2)样本109:从第 1 个时间开始→ 60步GRU 建模  7 维→ hn[0,1] 512 维

......

(15)样本 334:从第 129 个时间开始→ 60步GRU → hn[0,15] 512 维 

解码的时候还原,其实是一样的

  • 16个样本确实是随机采样的,不一定是连续的样本
  • 每个样本的60个时间步确实是连续的时间序列片段
  • 不同样本可以从各自时间序列的不同位置开始
  • "嵌入时使用权值矩阵是一样的,毕竟得在同一个准则下才有可比性"
  • RNN把5个段作为5个时间步处理
  • 每个序列有自己独立的隐藏状态流
  • 所有序列共享同一个RNN的参数
  • 第一个维度0表示GRU层索引(因为只有1层)
  • 第二个维度i表示112个序列中的第i个
  • 第三个维度表示512维隐藏状态
  • 传统RNN: 每个批次作为一个整体,60个时间步直接输入
  • SegRNN: 每个批次-特征组合作为独立序列,5个段作为时间步输入

明天看解码过程

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

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

相关文章

加速科技Flex10K-L测试机:以硬核创新重塑显示驱动芯片测试新标杆!

在2024年召开的世界显示产业创新发展大会上,加速科技自主研发的高密度显示驱动芯片测试设备Flex10K-L凭借其突破性技术创新,成功入选"十大创新技术(产品)"。作为国内显示驱动芯片测试领域的标杆性设备,Flex1…

Docker 部署 Vaultwarden

一、前言 1. 官网 1.1 Vaultwarden https://github.com/dani-garcia/vaultwarden https://github.com/wcjxixi/Vaultwarden-Wiki-Chn https://hub.docker.com/r/vaultwarden/server https://rs.ppgg.in/ # Vaultwarden Wiki 中文版 https://geekdaxue.co/read/Vaultward…

如何下载和使用Git:初学者指南

🌟 如何下载和使用Git:初学者指南 在当今的软件开发中,Git已经成为不可或缺的版本控制系统。无论你是独立开发者还是团队成员,掌握Git的基本操作都能帮助你更高效地管理代码。今天,我将详细介绍如何下载和使用Git&…

doris: SQL Server

Doris JDBC Catalog 支持通过标准 JDBC 接口连接 SQL Server 数据库。本文档介绍如何配置 SQL Server 数据库连接。 使用须知​ 要连接到 SQL Server 数据库,您需要 SQL Server 2012 或更高版本,或 Azure SQL 数据库。 SQL Server 数据库的 JDBC 驱动…

Leetcode 刷题记录 05 —— 普通数组

本系列为笔者的 Leetcode 刷题记录,顺序为 Hot 100 题官方顺序,根据标签命名,记录笔者总结的做题思路,附部分代码解释和疑问解答。 目录 01 最大子数组和 方法一:动态规划(卡达尼算法) 方法…

《DataWorks 深度洞察:量子机器学习重塑深度学习架构,决胜复杂数据战场》

在数字化浪潮汹涌澎湃的当下,大数据已然成为推动各行业发展的核心动力。身处这一时代洪流,企业对数据的处理与分析能力,直接关乎其竞争力的高低。阿里巴巴的DataWorks作为大数据领域的扛鼎之作,凭借强大的数据处理与分析能力&…

wordpress自定the_category的输出结构

通过WordPress的过滤器the_category来自定义输出内容。方法很简单,但是很实用。以下是一个示例代码: function custom_the_category($thelist, $separator , $parents ) {// 获取当前文章的所有分类$categories get_the_category();if (empty($categ…

2025牛客寒假算法基础集训营6

A.复制鸡 思路&#xff1a;比较简单&#xff0c;略。 void solve() {int n, m, k;cin >> n;int last -1, ans 0;for (int i 0; i<n; i){int x;cin >> x;if (x ! last){ans;}last x;}cout << ans << endl; } B.好伙计猜拳 思路&#xff1a;这…

【C#】详解C#中的内存管理机制

文章目录 前言一、C#内存管理的基本机制&#xff08;1&#xff09;托管堆&#xff08;Managed Heap&#xff09;&#xff08;2&#xff09;垃圾回收&#xff08;Garbage Collection&#xff09;&#xff08;3&#xff09;栈内存 二、 开发者需要主动管理的场景&#xff08;1&am…

ROS云课基础题库-01C++案例-甜甜圈

效率是核心&#xff0c;但效率高的教程会忽略掉非常多的细节。 解决问题的思路和细节对于一个问题的有效求解至关重要。 资料 云课五分钟-02第一个代码复现-终端甜甜圈C-CSDN博客 从云课五分钟到五秒钟焦虑的甜甜圈向前冲-CSDN博客 说明 复现重要性没有那么大&#xff0c;…

C/S架构与B/S架构

一、定义与核心区别 C/S架构&#xff08;Client/Server&#xff0c;客户端/服务器&#xff09; 客户端需安装专用软件&#xff08;如QQ、企业ERP系统&#xff09;&#xff0c;直接与服务器通信。服务器端通常包括数据库和业务逻辑处理1。特点&#xff1a;客户端承担部分计算任务…

【汇编语言】单片机程序执行过程

一、任务需求 指示灯LED4闪烁&#xff0c;亮0.5秒&#xff0c;灭0.5秒&#xff0c;无限循环 二、针对硬件的编程 1、确定原理图2、确定硬件的物理关系 三、设计步骤 1.用自己的语言描述工作流程 1.1指示灯LED4亮1.2延时0.5秒1.3指示灯LED4灭1.4延时0.5秒1.5跳转到1.1步 …

openharmony 富对富 WiFi投屏设计

castengine_wifi_display部件别名Sharing&#xff0c;媒体分享之意。拥有流媒体协议接入、媒体预览、媒体转分发能力&#xff0c;受投播管理服务管理和调用&#xff0c;是音视频投播子系统重要的流媒体能力部件。提供一套简单的Native C的接口&#xff0c;主要业务是Miracast投…

Android项目优化同步速度

最近项目需要使用ffmpeg&#xff0c;需要gradle配置引入ffmpeg库&#xff0c;发现原来通过google官方的代码仓&#xff0c;下载太慢了&#xff0c;每秒KB级别的速度。&#xff08;之前下gradle/gradle plugin都不至于这么慢&#xff09;&#xff0c;于是想到配置国内镜像源来提…

Git 如何配置多个远程仓库和免密登录?

自我简介&#xff1a;4年导游&#xff0c;10年程序员&#xff0c;最近6年一直深耕低代码领域&#xff0c;分享低代码和AI领域见解。 通用后台管理系统 代号&#xff1a;虎鲸 缘由 每次开发后台界面都会有很多相同模块&#xff0c;尝试抽离出公共模块作为快速开发的基座。 目标…

JVM组成面试题及原理

Java Virtual Machine&#xff08;JVM&#xff09;是Java程序的运行环境&#xff08;java二进制字节码的运行环境&#xff09; 好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收机制 JVM由哪些部分组成&#xff0c;运行流程是什么&#xff1f;…

江科大51单片机笔记【11】AT24C02数据存储秒表

一、数据存储 先把需要的模块导入做个测试 //main.c#include <REGX52.H> #include " LCD1602.h" #include " Key.h"void main() {LCD_Init();LCD_ShowString(1,1,"Hello");while(1){}} 代码思路 分成两块写&#xff0c;一块写I2C.c&am…

Hadoop的运行模式

Hadoop的运行模式 1、本地运行模式2、伪分布式运行模式3、完全分布式运行模式4、区别与总结 Hadoop有三种可以运行的模式&#xff1a;本地运行模式、伪分布式运行模式和完全分布式运行模式 1、本地运行模式 本地运行模式无需任何守护进程&#xff0c;单机运行&#xff0c;所有…

2.装饰器模式

概述 装饰器模式&#xff1a;在原有结构&#xff0c;动态地为对象添加职责&#xff0c;它是一种灵活的扩展功能方式。 业务场景&#xff1a;创建订单 假设你正在开发一个电商系统&#xff0c;用户在创建订单时可以选择不同的服务&#xff08;如折扣、配送、礼品包装等&#…

C++11新特性 10.初始化列表、initializer_list

目录 一.初始化列表 使用示例 二.initializer_list 1.基本概念 2.使用示例 一.初始化列表 C11提供的统一初始化方式&#xff0c;实现直接对数据初始化 使用示例 /* 初始化列表 */ #include <iostream> using namespace std; class Person { public:Person(string…