window patch按块分割矩阵

文章目录

  • 1. excel 示意
  • 2. pytorch代码
  • 3. window mhsa

1. excel 示意

将一个三维矩阵按照window的大小进行拆分成多块2x2窗口矩阵,具体如下图所示
在这里插入图片描述

2. pytorch代码

  • pytorch源码
import torch
import torch.nn as nn
import torch.nn.functional as Ftorch.set_printoptions(precision=3, sci_mode=False)if __name__ == "__main__":run_code = 0batch_size = 2seq_len = 4model_dim = 6patch_total = batch_size * seq_len * model_dimpatch = torch.arange(patch_total).reshape((batch_size, seq_len, model_dim)).to(torch.float32)print(f"patch.shape=\n{patch.shape}")print(f"patch=\n{patch}")patch_unfold = F.unfold(input=patch, kernel_size=(2, 2), stride=(2, 2))print(f"patch_unfold.shape=\n{patch_unfold.shape}")print(f"patch_unfold=\n{patch_unfold}")#   patch_unfold = patch_unfold.transpose(-1, -2)print(f"patch_unfold=\n{patch_unfold}")patch_nums = patch_unfold.reshape(batch_size, 4, 6)print(f"patch_nums=\n{patch_nums}")patch_nums_new = patch_nums.transpose(-1, -2)print(f"patch_nums_new.shape=\n{patch_nums_new.shape}")print(f"patch_nums_new=\n{patch_nums_new}")patch_nums_final = patch_nums_new.reshape(12, 2, 2)print(f"patch_nums_final.shape=\n{patch_nums_final.shape}")print(f"patch_nums_final=\n{patch_nums_final}")
  • 结果:
patch.shape=
torch.Size([2, 4, 6])
patch=
tensor([[[ 0.,  1.,  2.,  3.,  4.,  5.],[ 6.,  7.,  8.,  9., 10., 11.],[12., 13., 14., 15., 16., 17.],[18., 19., 20., 21., 22., 23.]],[[24., 25., 26., 27., 28., 29.],[30., 31., 32., 33., 34., 35.],[36., 37., 38., 39., 40., 41.],[42., 43., 44., 45., 46., 47.]]])
patch_unfold.shape=
torch.Size([8, 6])
patch_unfold=
tensor([[ 0.,  2.,  4., 12., 14., 16.],[ 1.,  3.,  5., 13., 15., 17.],[ 6.,  8., 10., 18., 20., 22.],[ 7.,  9., 11., 19., 21., 23.],[24., 26., 28., 36., 38., 40.],[25., 27., 29., 37., 39., 41.],[30., 32., 34., 42., 44., 46.],[31., 33., 35., 43., 45., 47.]])
patch_unfold=
tensor([[ 0.,  2.,  4., 12., 14., 16.],[ 1.,  3.,  5., 13., 15., 17.],[ 6.,  8., 10., 18., 20., 22.],[ 7.,  9., 11., 19., 21., 23.],[24., 26., 28., 36., 38., 40.],[25., 27., 29., 37., 39., 41.],[30., 32., 34., 42., 44., 46.],[31., 33., 35., 43., 45., 47.]])
patch_nums=
tensor([[[ 0.,  2.,  4., 12., 14., 16.],[ 1.,  3.,  5., 13., 15., 17.],[ 6.,  8., 10., 18., 20., 22.],[ 7.,  9., 11., 19., 21., 23.]],[[24., 26., 28., 36., 38., 40.],[25., 27., 29., 37., 39., 41.],[30., 32., 34., 42., 44., 46.],[31., 33., 35., 43., 45., 47.]]])
patch_nums_new.shape=
torch.Size([2, 6, 4])
patch_nums_new=
tensor([[[ 0.,  1.,  6.,  7.],[ 2.,  3.,  8.,  9.],[ 4.,  5., 10., 11.],[12., 13., 18., 19.],[14., 15., 20., 21.],[16., 17., 22., 23.]],[[24., 25., 30., 31.],[26., 27., 32., 33.],[28., 29., 34., 35.],[36., 37., 42., 43.],[38., 39., 44., 45.],[40., 41., 46., 47.]]])
patch_nums_final.shape=
torch.Size([12, 2, 2])
patch_nums_final=
tensor([[[ 0.,  1.],[ 6.,  7.]],[[ 2.,  3.],[ 8.,  9.]],[[ 4.,  5.],[10., 11.]],[[12., 13.],[18., 19.]],[[14., 15.],[20., 21.]],[[16., 17.],[22., 23.]],[[24., 25.],[30., 31.]],[[26., 27.],[32., 33.]],[[28., 29.],[34., 35.]],[[36., 37.],[42., 43.]],[[38., 39.],[44., 45.]],[[40., 41.],[46., 47.]]])

3. window mhsa

  • excel 示意图
    在这里插入图片描述
  • pytorch
import torch
import torch.nn as nn
import torch.nn.functional as Ftorch.set_printoptions(precision=3, sci_mode=False)if __name__ == "__main__":run_code = 0bs = 2num_patch = 16patch_depth = 4window_size = 2image_height = image_width = 4num_patch_in_window = window_size * window_sizepatch_total = bs * num_patch * patch_depthpatch_embedding = torch.arange(patch_total).reshape((bs, num_patch, patch_depth)).to(torch.float32)print(f"patch_embedding.shape=\n{patch_embedding.shape}")print(f"patch_embedding=\n{patch_embedding}")patch_embedding = patch_embedding.transpose(-1, -2)patch = patch_embedding.reshape(bs, patch_depth, image_height, image_width)print(f"patch=\n{patch}")window = F.unfold(patch, kernel_size=(window_size, window_size), stride=(window_size, window_size)).transpose(-1,-2)print(f"window.shape=\n{window.shape}")print(f"window=\n{window}")bs, num_window, patch_depth_times_num_patch_in_window = window.shapewindow = window.reshape(bs*num_window,patch_depth,num_patch_in_window).transpose(-1,-2)print(f"window.shape=\n{window.shape}")print(f"window=\n{window}")
  • 结果:
patch_embedding.shape=
torch.Size([2, 16, 4])
patch_embedding=
tensor([[[  0.,   1.,   2.,   3.],[  4.,   5.,   6.,   7.],[  8.,   9.,  10.,  11.],[ 12.,  13.,  14.,  15.],[ 16.,  17.,  18.,  19.],[ 20.,  21.,  22.,  23.],[ 24.,  25.,  26.,  27.],[ 28.,  29.,  30.,  31.],[ 32.,  33.,  34.,  35.],[ 36.,  37.,  38.,  39.],[ 40.,  41.,  42.,  43.],[ 44.,  45.,  46.,  47.],[ 48.,  49.,  50.,  51.],[ 52.,  53.,  54.,  55.],[ 56.,  57.,  58.,  59.],[ 60.,  61.,  62.,  63.]],[[ 64.,  65.,  66.,  67.],[ 68.,  69.,  70.,  71.],[ 72.,  73.,  74.,  75.],[ 76.,  77.,  78.,  79.],[ 80.,  81.,  82.,  83.],[ 84.,  85.,  86.,  87.],[ 88.,  89.,  90.,  91.],[ 92.,  93.,  94.,  95.],[ 96.,  97.,  98.,  99.],[100., 101., 102., 103.],[104., 105., 106., 107.],[108., 109., 110., 111.],[112., 113., 114., 115.],[116., 117., 118., 119.],[120., 121., 122., 123.],[124., 125., 126., 127.]]])
patch=
tensor([[[[  0.,   4.,   8.,  12.],[ 16.,  20.,  24.,  28.],[ 32.,  36.,  40.,  44.],[ 48.,  52.,  56.,  60.]],[[  1.,   5.,   9.,  13.],[ 17.,  21.,  25.,  29.],[ 33.,  37.,  41.,  45.],[ 49.,  53.,  57.,  61.]],[[  2.,   6.,  10.,  14.],[ 18.,  22.,  26.,  30.],[ 34.,  38.,  42.,  46.],[ 50.,  54.,  58.,  62.]],[[  3.,   7.,  11.,  15.],[ 19.,  23.,  27.,  31.],[ 35.,  39.,  43.,  47.],[ 51.,  55.,  59.,  63.]]],[[[ 64.,  68.,  72.,  76.],[ 80.,  84.,  88.,  92.],[ 96., 100., 104., 108.],[112., 116., 120., 124.]],[[ 65.,  69.,  73.,  77.],[ 81.,  85.,  89.,  93.],[ 97., 101., 105., 109.],[113., 117., 121., 125.]],[[ 66.,  70.,  74.,  78.],[ 82.,  86.,  90.,  94.],[ 98., 102., 106., 110.],[114., 118., 122., 126.]],[[ 67.,  71.,  75.,  79.],[ 83.,  87.,  91.,  95.],[ 99., 103., 107., 111.],[115., 119., 123., 127.]]]])
window.shape=
torch.Size([2, 4, 16])
window=
tensor([[[  0.,   4.,  16.,  20.,   1.,   5.,  17.,  21.,   2.,   6.,  18.,22.,   3.,   7.,  19.,  23.],[  8.,  12.,  24.,  28.,   9.,  13.,  25.,  29.,  10.,  14.,  26.,30.,  11.,  15.,  27.,  31.],[ 32.,  36.,  48.,  52.,  33.,  37.,  49.,  53.,  34.,  38.,  50.,54.,  35.,  39.,  51.,  55.],[ 40.,  44.,  56.,  60.,  41.,  45.,  57.,  61.,  42.,  46.,  58.,62.,  43.,  47.,  59.,  63.]],[[ 64.,  68.,  80.,  84.,  65.,  69.,  81.,  85.,  66.,  70.,  82.,86.,  67.,  71.,  83.,  87.],[ 72.,  76.,  88.,  92.,  73.,  77.,  89.,  93.,  74.,  78.,  90.,94.,  75.,  79.,  91.,  95.],[ 96., 100., 112., 116.,  97., 101., 113., 117.,  98., 102., 114.,118.,  99., 103., 115., 119.],[104., 108., 120., 124., 105., 109., 121., 125., 106., 110., 122.,126., 107., 111., 123., 127.]]])
window.shape=
torch.Size([8, 4, 4])
window=
tensor([[[  0.,   1.,   2.,   3.],[  4.,   5.,   6.,   7.],[ 16.,  17.,  18.,  19.],[ 20.,  21.,  22.,  23.]],[[  8.,   9.,  10.,  11.],[ 12.,  13.,  14.,  15.],[ 24.,  25.,  26.,  27.],[ 28.,  29.,  30.,  31.]],[[ 32.,  33.,  34.,  35.],[ 36.,  37.,  38.,  39.],[ 48.,  49.,  50.,  51.],[ 52.,  53.,  54.,  55.]],[[ 40.,  41.,  42.,  43.],[ 44.,  45.,  46.,  47.],[ 56.,  57.,  58.,  59.],[ 60.,  61.,  62.,  63.]],[[ 64.,  65.,  66.,  67.],[ 68.,  69.,  70.,  71.],[ 80.,  81.,  82.,  83.],[ 84.,  85.,  86.,  87.]],[[ 72.,  73.,  74.,  75.],[ 76.,  77.,  78.,  79.],[ 88.,  89.,  90.,  91.],[ 92.,  93.,  94.,  95.]],[[ 96.,  97.,  98.,  99.],[100., 101., 102., 103.],[112., 113., 114., 115.],[116., 117., 118., 119.]],[[104., 105., 106., 107.],[108., 109., 110., 111.],[120., 121., 122., 123.],[124., 125., 126., 127.]]])

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

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

相关文章

python013-基于Python的智能停车系统的设计与实现(源码+数据库+论文+部署讲解等)

💕💕作者: 爱笑学姐 💕💕个人简介:十年Java,Python美女程序员一枚,精通计算机专业前后端各类框架。 💕💕各类成品Java毕设 。javaweb,ssm&#xf…

gitlab无法登录问题

在我第一次安装gitlab的时候发现登录页面是 正常的页面应该是 这种情况的主要原因是不是第一次登录,所以我们要找到原先的密码 解决方式: [rootgitlab ~]# vim /etc/gitlab/initial_root_password# WARNING: This value is valid only in the followin…

无线4G多联机分户计费集中控制系统

拓森无线4G多联机集中控制系统应用于宝龙广场多联机计费集中控制节能改造项目,包括多联机集中控制,分户计费,空调监控管理、告警管理、节能管控、统计报表、能效分析、空调远程开关机等功能。项目的成功实施,不仅提升了维护管理效…

oracle多次密码错误登录,用户锁住或失效

多次输入错误账号查询状态: select username,account_status from dba_users; TEST EXPIRED(GRACE) 密码错误延迟登录,延迟登录还能登录 或者 TEST LOCKED(TIMED) 密码错误锁 TEST EXPIRED(GR…

连通两台VMware虚拟机

连通两台VMware虚拟机 Fairing Winds and Following Seas VMware各模式的区别 在尝试连接之前,我们要搞清楚各模式的区别 简单来说就是,只有桥接模式和NAT模式是可以实现虚拟机联通的,而桥接模式和NAT模式分别对应了 V M w a r e VMware VM…

C++ 容器适配器

文章目录 1. 适配器2. stack和queue2.1 deque2.1.1 deque的底层结构2.1.2 deque如何实现头插和随机访问 2.2 用deque实现栈和队列2.3 deque的优缺点 3. priority_queue 1. 适配器 适配器是什么? 适配器是一种设计模式,实质上就是一种复用,即…

DeepSeek R1本地部署解决,DeepSeek服务繁忙

DeepSeek 本地部署是指将DeepSeek模型下载到本地电脑上,利用电脑的显卡进行数据处理和推理,可以减少网络延迟,提高数据处理和响应速度,从而避免将数据传输到云端,增强了数据的主权和控制,减少了因网络连接可…

GPT和BERT

笔记来源: Transformer、GPT、BERT,预训练语言模型的前世今生(目录) - B站-水论文的程序猿 - 博客园 ShusenWang的个人空间-ShusenWang个人主页-哔哩哔哩视频(RNN模型与NLP应用) 一、GPT 1.1 GPT 模型的…

深入浅出Java反射:掌握动态编程的艺术

小程一言反射何为反射反射核心类反射的基本使用获取Class对象创建对象调用方法访问字段 示例程序应用场景优缺点分析优点缺点 注意 再深入一些反射与泛型反射与注解反射与动态代理反射与类加载器 结语 小程一言 本专栏是对Java知识点的总结。在学习Java的过程中,学习…

JDK 14,15,17的一些新特性(部分常用)

1:instanceof(后,使用不再需要墙转) 2:switch语句增强 1:支持lmbda,自动防击穿,有返回值 2:支持case多个值,复杂逻辑结果支持yield返回 3:字符串…

活字格使用说明书

字格设计使用说明书 目录 1. 数据 2. 页面 3. 组件 4. 命令 一、数据 1.表数据创建(鼠标移动到表右击点击创建表) ‘ 图表 1 鼠标移至表1右击可重命名,添加字段输入所需字段名(一般数据类型的要注意:日期格式字段---日期、ID或者字典字段---整数、金…

springboot021校园周边美食探索及分享平台

版权声明 所有作品均为本人原创,提供参考学习使用,如需要源码数据库配套文档请移步 www.taobysj.com 搜索获取 技术实现 开发语言:Javavue。 框架:后端spingboot前端vue。 模式:B/S。 数据库:mysql。 开…

Kubernetes部署KeyDB服务

Kubernetes YAML 配置文件,部署一个 KeyDB 容器 vi keydb-deployment.yaml内容如下 apiVersion: apps/v1 kind: Deployment metadata:name: keydb-deployment spec:replicas: 1selector:matchLabels:app: keydbtemplate:metadata:labels:app: keydbspec:container…

新手自学:如何用gromacs对简单分子复合物进行伞形采样

1、建立体系: 1、将蛋白的pdb文件转化为gmx: gmx pdb2gmx -f 2BEG_model1_capped.pdb -ignh -ter -o complex.gro 这个网页可以实现将多肽序列转化为pdb: ProBuilder On-line 这个教程的蛋白2BFG包含两条链(chain A和B) 在生成的topol文件中,增加如下的内容,效果就…

如何使用Java语言在Idea和Android中分别建立服务端和客户端实现局域网聊天

手把手教你用Java语言在Idea和Android中分别建立服务端和客户端实现局域网聊天 目录 文章目录 手把手教你用**Java**语言在**Idea**和**Android**中分别建立**服务端**和**客户端**实现局域网聊天**目录**[toc]**基本实现****问题分析****服务端**Idea:结构预览Server类代码解…

金蝶云星空与马帮平台无缝对接,提高供应链效率

采购退货金蝶》马帮ok:系统对接集成案例分享 在企业的供应链管理中,数据的高效流转和准确处理至关重要。本文将聚焦于一个实际运行的系统对接集成案例——将金蝶云星空的数据集成到马帮平台,以实现采购退货数据的无缝传输和处理。 为了确保…

GPT-4o微调SFT及强化学习DPO数据集构建

假设,已经标注的训练数据集df包含了提示词、输入和输出三列。 构建微调SFT的数据集代码如下: data [] for x in df.values:prompt x[1]user_content x[2]assistant_content x[3]data.append({"messages": [{"role": "sys…

鸿蒙HarmonyOS NEXT开发:横竖屏切换开发实践

文章目录 一、概述二、窗口旋转说明1、配置module.json5的orientation字段2、调用窗口的setPreferredOrientation方法 四、性能优化1、使用自定义组件冻结2、对图片使用autoResize3、排查一些耗时操作 四、常见场景示例1、视频类应用横竖屏开发2、游戏类应用横屏开发 五、其他常…

02.10 TCP之文件传输

1.思维导图 2.作业 服务器代码&#xff1a; #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <pthread.h> …

Qt 控件整理 —— 按钮类

一、PushButton 1. 介绍 在Qt中最常见的就是按钮&#xff0c;它的继承关系如下&#xff1a; 2. 常用属性 3. 例子 我们之前写过一个例子&#xff0c;根据上下左右的按钮去操控一个按钮&#xff0c;当时只是做了一些比较粗糙的去演示信号和槽是这么连接的&#xff0c;这次我们…