FEDformer 代码分析(2)

news2024/11/16 3:50:43

 首先总结一下FEDformer里面这些这些东西,

mean的尺寸是:(1,96,7)

seasonal_init的尺寸是:(1,144,7)

trend_init的尺寸是:(1,144,7)

zeros的尺寸是:(1,96,7)

从上面的线可以看出来,和传统transformer不同的成分,也就是seasonal和trend之类的东西,他们都被输入进了decoder里面,而encoder里面的东西还是最原始的x_enc。

所以,从这个层面来看,看来decoder主要做的工作是辅助性的,他将原始的x_enc做了一些处理后,放进了decoder里面,而decoder又会和encoder进行交互。

x_enc的尺寸是:(1,96,7)

x_dec的尺寸是:(1,144,7)

x_mark_enc的尺寸是:(1,96,4)

x_mark_dec的尺寸是:(1,144,4)

然后经过了enc_embedding之后的enc_out就是(1,96,512的维度的),也就是说,他把后面的那个feature是7的做了一个embedding,不过能从7做到512不知道是怎么做的。来看看他是怎么做的。

 

 value_embedding是一个一维卷积。

temporal_embedding是一个时序embedding的方式。

也就是说,到了encoder这里的enc_out是经过了embedding的feature。

他的维度是(1,96,512)的维度的向量。

 然后,我们进入encoder,来看一下这个encoder里面是有什么组成的。

 它是由三个部分组成的,

(1)attention

(2)conv

(3)norm

下图所示,大体由下面这些模块组成

红色的部分是,傅里叶block

绿色的是传统的transformer里面的attention的映射linear

黄色的是out_projection,看他的名字的意思是一个前馈层,一会再看看具体有啥特殊的用处没。

然后是两个一维卷积,先2048后变回来又变成了512的。

然后就是两个叫做decomp的模块,这两个模块的进出feature的dimension都是1,不知道在做啥的,一会仔细看看。

到encoder_layer这里的这个x,他还是实数,并不是复数,这里还没产生傅里叶变换。 

 

然后,他会进入这个Encoder_layer里面进行一个操作,这个黑色的就是注意力的计算模块,这个是主要的创新点。可以看到他的 attention,叫做inner_correlation这个操作,而不是各种attention的叫法。

 在进入这个黑色的框框之前的操作,也还和之前attention的准备操作是一样的,

他输入的queries,keys,values都是(batch_size,length,feature)这种维度的tensor,在这里的具体的维度就是(1,96,512)。

他具体的attention的计算是这个叫做,FourierBlock的东西,这个东西的注释也写的很清楚,他由三个部分组成,FFT快速傅里叶变换,linear transform线性的变化,还有Inverse FFT反傅里叶变化组成,也就是进入了频域后进行了linear transform? 详细研究一下。 

这个红色的部分是一个多头注意力的调整的操作,经过这个操作,这个x就是q的一个多头版本,他把8这个维度调整到了前面,也就是说原本是(1,96,8,64)的tensor,这个代表的意思是,输入的time_stamp的数量是96,然后他后面的那个feature的维度是512,分成了8,64。变成了这个x,这个x的维度是(1,8,64,96)。

也就是说,从(1,96,8,64)->(1,8,64,96) ;大概的意思是,(1,96,512)-》(1,512,96)。

用一个低维度的例子来看看,一个序列的长度是5,一共有8个time_stamp,每一个time_stamp的feature的维度是5。也就是说,每一个位置的1这个地方,都是他的第一个feature的值。

 做了permute这个操作后,

 这个tensor的最低维度的向量的组成就是,所有的timestamp的第一个,第二个,第三个,第四个,第五个feature的值了,比如像这样。

(1,8,5),变成了,(1,5,8),也就是说最里面有几个就是最揭示这个tensor的本质的东西。

这个x的维度是,(1,8,64,96),所以,他最里面的feature的组成是time_stamp,也就是这96个点的一个维度的feature。 

 可以看到,下面两个红色的都是一个东西,但是因为多头注意力的存在,使得这里面的东西分成了两份,x也是有一样的意思,他分成了8份,然后64份,然后是96,也就是他最里面的基本的元素是96这个序列长度的每一个基本的单位,第一个里面是,所有的96的第一个单位,第二个里面是96里面的第二个单位这样。

 x经过傅里叶变换后,变成了下面这样的。

 原本的x是(1,8,64,96)变成了(1,8,64,49)

 傅里叶变换后的维度是原本的维度的一半+1。

可以看出来,下面这个操作是先生成一个空的和傅里叶变换后相同维度的tensor,然后利用抽样的频域来存储。

下面这个操作是对傅里叶域中的每一个频域都进行乘积,用这个torch.einsum这个操作,可以使得这个矩阵乘法变得更快。

 然后,经过傅里叶的inner_correlation后,这个会出去,和注意力的操作是一样的,加了一个前馈,512 to 512 然后往前走。

 然后,回到了encoder_layer里面,可以看到,这里面加了很多的残差链接。

 然后,我们来看一下这个decomp1和decomp2,是干什么的操作,。

注意,这里的x还是(1,96,512) 的维度的。

 然后,进入了这个序列分解里面。

 可以看到,这个里面还是只有两个东西

1(超大kernal组成的池化)

2  线性映射

 可以看到,这个fedformer里面,都是由这些个重要的小组件构成的,只要理解了这个小组件,一步步的就能理解的很透彻。

 可以看到,下面显示,这个x被decomp分解了两次,

然后,通过各种encoder,这个x会输出

 然后,重复这个过程两遍,回到了原来的这个地方。

 可以看到,encoder里面,用到的输入都是x_enc和他的marker,并没有其他部分。

下一步,到了decoder的不分,decoder的decoder_embedding的部分他的输入并不是纯粹的x_dec而是,seasonal_init这个和他的x_mark_dec这个东西,这是和传统的transformer是有区别的。

还是有一个疑问,为什么这个x_dec这个东西,他只用了一次生成了一个不用的zeros?

 可以观察到,这个decoder的input的主要的东西,是x_enc的分解出来的东西。

这个seasonal_init的维度是(1,144,7)这个维度的。而,enc_out的维度是(1,96,512)的维度的。

 

经过上面这一步之后,这个dec_out的维度也是512的维度的了。

即:他的维度是(1,144,512)这个维度的。 

然后,注意一下,下面这个decoder的两个输入的维度。

dec_out的维度是(1,144,512)

enc_out的维度是(1,96,512)

trend_init的维度是(1,144,7)

然后进入了decoder里面,可以看到这个trend是没有发生进入运算的,只是进行一个叠加的过程。

 这和cross是encoder的输出,enc_out,这个x是dec_out。

然后,这两个东西就进入了decoder_layer里面,我们来看看这个东西他里面的东西有啥用,很明显他和encoder_layer是有区别的。

 

 如下图,可以看到先是用x做了一个纯的attention。

然后,用x和cross,也就是encoder的输出做了一个交叉的attention。

可以看到,有两种不同的decomp的分解的情况,

其中一个是series_decomp_multi的分解,

另一个是series_decomp的分解。

一会看看这两个有什么区别。

可以看到,每次做一个attention,都会decomp一次。

 我们可以看到,两个series_decomp两个有区别。

一个是series_decomp,没有linear这个东西。

另外一个是series_decomp_multi这个东西,他是进行了好几次moving这个操作,然后将moving_mean这个东西进行堆叠,然后做了一个linear的操作。

 dec_out是decoder的两个输出的相加。

 这两个输出都是(1,144,7)这个维度的。

然后,这个decoder的out,就是输出的结果。他的维度是(1,96,7)这个维度的。

 

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

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

相关文章

[附源码]java毕业设计疫苗接种管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

四、图片特效

目录一、灰度处理二、颜色反转三、马赛克四、毛玻璃五、图片融合六、边缘检测与浮雕效果1 - 边缘检测2 - 浮雕效果七、颜色映射八、油画效果一、灰度处理 使用openCV的imread方法实现 import cv2img0 cv2.imread(image0.jpg, 0) img1 cv2.imread(image0.jpg, 1) print(img0…

嵌入式学习笔记(1)基本知识、C语言常用关键字、OLED

STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器 STM32常应用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等 STM32功能强大、性能优异、片上资源丰富、功耗低,是一款经典的嵌入式微控制器 STM32F103C8T6 系…

windows + anaconda 安装PySpark3.0.1

1、背景 Spark作为分布式内存计算框架,可以广泛应用在数据处理、分析等应用场景。因此,希望借助Spark高性能的处理项目中的数据,搭建此开发环境,深入了解Spark的处理能力与实现机制。 2、开发环境 在windows10上使用Anaconda作为…

微信小程序使用github协作

微信小程序github协作所需相关设置 1.点击开发工具右上角的版本管理初识化本地仓库: 2.去github新建一个仓库,复制仓库的ssh的url添加到仓库设置中的远程连接中: 3.在仓库设置中的通用里设置好自己的用户名和邮箱 4.生成ssh key 由于我们使…

web前端网页制作课作业——用DIV+CSS技术设计的家乡旅游主题网站

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法,如盒子的嵌套、浮动、margin、border、background等属性的使用,外部大盒子设定居中,内部左中右布局,下方横向浮动排列,大学学习的前端知识点和布局方式都有…

Metabase学习教程:视图-3

掌握条形图可视化 创建条形图并使用可视化设置对其进行自定义。 我们看看创建条形图和编辑条形图的设置,然后谈谈堆积条形图。 创建条形图 您可以使用元数据库的示例数据库。选择新的>问题>原始数据>示例数据库。选择示例数据库的Orders表作为您的数据…

腾讯T4级架构师用21个项目带你吃透379页深度学习TensorFlow实践pdf

前言 有人调侃我们说: 程序员不如送外卖。送外卖是搬运食物,自己是搬运代码,都不产出新的东西……透支体力,又消耗健康,可替代性极强,30岁之后就要面临被优化的危险……想跳槽,但是更高的平台…

使用XShell、XFTP连接虚拟机或者服务器教程

文章目录前期准备安装建立连接XFTP部分前期准备 官方网站下载 需要购买,但是我记得我好像是通过邮件发送过来的,应该是那个30天试用版,要是不会操作的话可以评论私我发你网盘。 安装 打开安装包(xshell / xftp ,两个软件的安装步…

SpringBoot SpringBoot 开发实用篇 6 监控 6.2 SpringBoot Admin

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇6 监控6.2 SpringBoot Admin6.2.1 可视化监控平台6.2.2 SpringBoot A…

论文阅读-Joint Audio-Visual Deepfake Detection(音视频Deepfake检测)

一、论文信息 论文名称:Joint Audio-Visual Deepfake Detection 会议:ICCV2021 作者团队: 二、动机与创新 动机 Visual deepfake上有许多检测方法和数据集,而对audio deepfake以及visual-audio两种模式之间的deepfake方法较少…

mybatis配置文件

名字&#xff1a; mybatis-config.xml 作用&#xff1a; 配置自己的数据库地址、名字、密码以及mysql驱动 ... <!--配置--> <configuration><!--属性--><properties></properties> <!--全局参数设置--><settings></settings> …

力扣 73. 矩阵置零 C语言实现

题目描述&#xff1a; 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 题目链接 解题思路&#xff1a; 由于题目中提示了哈希表&#xff0c;所以本人想到的方法是建立一个哈希表分别用key和value…

用HTML+CSS仿网易云音乐网站(6个页面)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

绘制路径

QPainterPath&#xff08;绘制器&#xff09; QPainterPath类提供一个容器&#xff0c;可以用来创建图形并且重复使用。绘制器路径是由许多图形构建基块&#xff08;如矩形、椭圆形、直线和曲线&#xff09;组成的对象。构建基块可以连接在封闭的子路径中&#xff0c;例如作为矩…

ALU——调用加法乘法模块

只调用加法模块的仿真图&#xff1a; &#xff08;注&#xff1a;alu_control 为十六进制 001高位加载 src2的低16位加载到高16位上 002算数右移 src1算数右移 &#xff08;高位补1&#xff09; 004逻辑右移 src1逻辑右移 &#xff08;逻辑右移直接补0&#xff09; 008逻辑左移…

MagicPods(在Windows电脑上可以实现airpods2弹窗,查看单个耳机电量、充电仓电量)

1.MagicPods的安装方式 Windows电脑下打开Microsoft Store,进入后搜索Magicpods。然后就可以点击下载。&#xff08;软件的费用是12元&#xff0c;可以先免费试用&#xff09; 有可能会出现&#xff1a;下载任何微软商店应用程序都显示错误代码: 0x80240438 解决方法&#xf…

基于HTML+CSS+JS制作商城(web前端网页制作课作业)---手机主题 7页

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 在线商城购物 | 水果商城 | 商城系统建设 | 多平台移动商城 | H5微商城购物商城项目 | HTML期末大学生网页设计作业 HTML&#xff1a;结构 CSS&#…

ER图到关系模型的转换和练习SQL语言

目录 一、实验要求 二、作业1解答 1&#xff0e;ER图 2&#xff0e;关系模型&#xff1a; 三、作业2解答 1. 建表并插入数据 2. 使用查询语句查询相关信息 查询计算机系男生的信息&#xff1a; 查询鹿晗的年龄 查询姓名第二个字为“丽”的同学的信息 按照性别列出男…

跨境人,是继续坚守还是求新变新?(Starday)

与以往相比&#xff0c;跨境电商行业圈有许多让卖家难以想象的负面新闻&#xff0c;从亚马逊封号潮、海运价格暴涨、服务商跑路、跨境电商公司倒闭等新闻常有耳闻&#xff0c;今年黑五等销售季的单量也让人不忍直视&#xff0c;许多跨境人战战兢兢&#xff0c;心中非常焦虑。如…