【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个段作为时间步输入

明天看解码过程

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【CUDA】Reduce归约求和(下)

目录 前言1. 优化技巧4:展开最后一个warp减少同步2. 优化技巧5:完全展开循环3. 优化技巧6:调节GridSize和BlockSize4. 优化技巧7:使用shuffle指令5. 拓展—CUDA工具链的使用结语下载链接参考 前言 学习 UP 主 比飞鸟贵重的多_HKL …

IDE集成开发环境MyEclipse中安装SVN

打开Myeclipse的help菜单----install from site 点击add弹出对话框 在输入框中输入对应内容 http://subclipse.tigris.org/update_1.10.x 点击OK之后,会刷新出两个选项,需要选中的 点击next,出现许可的时候选中同意,一直结束等…

如何计算两个向量的余弦相似度

参考笔记: https://zhuanlan.zhihu.com/p/677639498 日常学习之:如何计算两个向量或者矩阵的余弦相似度-CSDN博客 1.余弦相似度定理 百度的解释:余弦相似度,又称为余弦相似性,是通过计算两个向量的夹角余弦值来评估…

国产编辑器EverEdit - 宏功能介绍

1 宏 1.1 应用场景 宏是一种重复执行简单工作的利器,可以让用户愉快的从繁琐的工作中解放出来,其本质是对键盘和菜单的操作序列的录制,并不会识别文件的内容,属于无差别无脑执行。 特别是对一些有规律的重复按键动作,…

vue安装stylelint

执行 npm install -D stylelint postcss-html stylelint-config-recommended-vue stylelint-config-standard stylelint-order stylelint-prettier postcss-less stylelint-config-property-sort-order-smacss 安装依赖,这里是less,sass换成postcss-scss…

(最新教程)Cursor Pro订阅升级开通教程,使用支付宝订阅Cursor Pro Plus

一、如何使用Cursor ? 目前要使用Cursor - The AI Code Editor,直接去下载安装就可以了,不过基础版只能用两周,如果需要继续使用,就要订阅pro plus或者企业版了。 二、如何订阅Cursor Pro Plus ? 因为基础…

Cursor 使用经验,一个需求开发全流程

软件开发中 Cursor 的使用经验成为关注焦点,尤其是处理大型数据集的需求。用户提到“Cursor 使用经验,一个需求开发全流程”,但“Cursor”可能指数据库游标,涉及逐行处理数据。本文将详细探讨开发一个需求的完整流程,包…

vue2实现组件库的自动按需引入,unplugin-auto-import,unplugin-vue-components

1.使用ant-design-vue或者element-ui时,如何每个组件都去import导入组件,大大降低了开发效率,如果全局一次性注册会增加项目体积,那么如何实现既不局部引入,也不全局注册? 2.在element-plus官网看到有说明…

蓝桥杯备赛:一道数学题(练思维(同余的应用))

题目:请问由1-8组成的8位数中有多少个数字可以被1111整除? 首先这道题目看着很难,如果我们直接用代码做的话,也要跑很久,那能不呢想想有什么样的思路可以巧妙一点解开这道题目呢? 有的兄弟有的 这道题目的…

[Lc7_分治-快排] 快速选择排序 | 数组中的第K个最大元素 | 库存管理 III

目录 1. 数组中的第K个最大元素 题解 代码 2.库存管理 III 代码 1. 数组中的第K个最大元素 题目链接:215. 数组中的第K个最大元素 题目分析: 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要…

Unity引擎使用HybridCLR(华佗)热更新

大家好,我是阿赵。   阿赵我做手机游戏已经有十几年时间了。记得刚开始从做页游的公司转到去做手游的公司,在面试的时候很重要的一个点,就是会不会用Lua。使用Lua的原因很简单,就是为了热更新。   热更新游戏内容很重要。如果…

【神经网络】python实现神经网络(一)——数据集获取

一.概述 在文章【机器学习】一个例子带你了解神经网络是什么中,我们大致了解神经网络的正向信息传导、反向传导以及学习过程的大致流程,现在我们正式开始进行代码的实现,首先我们来实现第一步的运算过程模拟讲解:正向传导。本次代…

【Linux】冯诺依曼体系与操作系统理解

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:Linux 目录 前言 一、冯诺依曼体系结构 二、操作系统 1. 操作系统的概念 2. 操作系统存在的意义 3. 操作系统的管理方式 4. 补充:理解系统调用…

HTML-网页介绍

一、网页 1.什么是网页: 网站是指在因特网上根据一定的规则,使用 HTML 等制作的用于展示特定内容相关的网页集合。 网页是网站中的一“页”,通常是 HTML 格式的文件,它要通过浏览器来阅读。 网页是构成网站的基本元素&#xf…

STM32——GPIO介绍

GPIO(General-Purpose IO ports,通用输入/输出接口)模块是STM32的外设接口的核心部分,用于感知外界信号(输入模式)和控制外部设备(输出模式),支持多种工作模式和配置选项。 1、GPIO 基本结构 STM32F407 的每个 GPIO 引脚均可独立配置,主要特性包括: 9 组 GPIO 端口…

字节码是由什么组成的?

Java字节码是Java程序编译后的中间产物,它是一种二进制格式的代码,可以在Java虚拟机(JVM)上运行。理解字节码的组成有助于我们更好地理解Java程序的运行机制。 1. Java字节码是什么? 定义 Java字节码是Java源代码经过…

链表算法题目

1.两数相加 两个非空链表,分别表示两个整数,只不过是反着存储的,即先存储低位在存储高位。要求计算这两个链表所表示数的和,然后再以相同的表示方式将结果表示出来。如示例一:两个数分别是342和465,和为807…

blender学习25.3.8

【04-进阶篇】Blender材质及灯光Cycle渲染&后期_哔哩哔哩_bilibili 注意的问题 这一节有一个大重点就是你得打开显卡的渲染,否则cpu直接跑满然后渲染的还十分慢 在这里你要打开GPU计算,但是这还不够 左上角编辑,偏好设置,系…

【godot4.4】布局函数库Layouts

概述 为了方便编写一些自定义容器和控件、节点时方便元素布局,所以编写了一套布局的求取函数,统一放置在一个名为Layouts的静态函数库中。 本文介绍我自定义的一些布局计算和实现以及函数编写的思路,并提供完整的函数库代码(持续…

Windows下配置Conda环境路径

问题描述: 安装好Conda之后,创建好自己的虚拟环境,同时下载并安装了Pycharm,但在Pycharm中找不到自己使用Conda创建好的虚拟环境。显示“Conda executable is not found” 解决办法(依次尝试以下) 起初怀…