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.]]])
相关文章:
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_p…...
机器学习(李宏毅)——BERT
一、前言 本文章作为学习2023年《李宏毅机器学习课程》的笔记,感谢台湾大学李宏毅教授的课程,respect!!! 读这篇文章必须先了解self-attention、Transformer,可参阅我其他文章。 二、大纲 BERT简介self-…...
数据科学之数据管理|统计学
使用python学习统计 目录 01 统计学基础 7 一、 统计学介绍 7 二、 数据和变量 8 02 描述统计 10 一、 描述统计概述 10 二、 分类变量的描述 11 三、 等距数值变量的描述 13 四、 等比数值变量的描述 16 五、 常用软件包介绍 16 六、 数值变量的描述统计 18 (一)…...
深度学习-111-大语言模型LLM之基于langchain的结构化输出功能实现文本分类
文章目录 1 langchain的结构化输出1.1 推荐的使用流程1.2 模式定义1.3 返回结构化输出1.3.1 工具调用(方式一)1.3.2 JSON模式(方式二)1.3.3 结构化输出法(方式三)2 文本分类2.1 定义分类模式2.2 配置分类提示模板2.3 初始化分类模型2.4 分类示例3 参考附录1 langchain的结构化输…...
常见的排序算法:插入排序、选择排序、冒泡排序、快速排序
1、插入排序 步骤: 1.从第一个元素开始,该元素可以认为已经被排序 2.取下一个元素tem,从已排序的元素序列从后往前扫描 3.如果该元素大于tem,则将该元素移到下一位 4.重复步骤3,直到找到已排序元素中小于等于tem的元素…...
C++17 中的 std::gcd:探索最大公约数的现代 C++ 实现
文章目录 一、std::gcd 的基本用法(一)包含头文件(二)函数签名(三)使用示例 二、std::gcd 的实现原理三、std::gcd 的优势(一)简洁易用(二)类型安全ÿ…...
力扣刷题(数组篇)
日期类 #pragma once#include <iostream> #include <assert.h> using namespace std;class Date { public:// 构造会频繁调用,所以直接放在类里面(类里面的成员函数默认为内联)Date(int year 1, int month 1, int day 1)//构…...
OpenWRT中常说的LuCI是什么——LuCI介绍(一)
我相信每个玩openwrt的小伙伴都或多或少看到过luci这个东西,但luci到底是什么东西,可能还不够清楚,今天就趁机来介绍下,openwrt中的luci,到底是个什么东西。 什么是LuCI? 首先,LuCI是OpenWRT中…...
机器学习核心算法解析
机器学习核心算法解析 机器学习是人工智能的核心技术之一,它通过从数据中学习模式并做出预测或决策。本文将深入解析机器学习的核心算法,包括监督学习、无监督学习和强化学习,并通过具体案例和代码示例帮助读者理解这些算法的实际应用。 1. …...
【目标检测json2txt】label从COCO格式json文件转YOLO格式txt文件
目录 🍀🍀1.COCO格式json文件 🌷🌷2.YOLO格式txt文件 💖💖3.xml2json代码(python) 🐸🐸4.输入输出展示 🙋🙋4.1输入json 🍂🍂4.2输出txt 整理不易,欢迎一键三连!!! 送你们一条美丽的--分割线-- 🍀🍀1.COCO格式json文件 COCO数…...
LVDS接口总结--(5)IDELAY3仿真
仿真参考资料如下: https://zhuanlan.zhihu.com/p/386057087 timescale 1 ns/1 ps module tb_idelay3_ctrl();parameter REF_CLK 2.5 ; // 400MHzparameter DIN_CLK 3.3 ; // 300MHzreg ref_clk ;reg …...
Flink内存配置和优化
在 Apache Flink 1.18 的 Standalone 集群中,内存设置是一个关键配置,它直接影响集群的性能和稳定性。 Flink 的内存配置主要包括 JobManager 和 TaskManager 的内存分配。 以下是如何在 Standalone 模式下配置内存的详细说明。 JobManager 内存配置 Jo…...
网络安全之笔记--Linus命令
Linux命令 文件和目录操作 ls 列出目录内容 常用选项 -a:显示所有文件和目录(包括隐藏文件,以.开头的文件)。 -l:以长格式显示文件和目录的详细信息。 -h:与-l配合使用,以更易读的方式显示文件大…...
deepseek和chatgpt对比
DeepSeek 和 ChatGPT 都是自然语言处理领域的工具,但它们的设计目标和功能有所不同。 功能定位: ChatGPT 是一个基于 OpenAI GPT-3 或 GPT-4 的聊天机器人,旨在进行人机对话、文本生成、问题解答等,广泛应用于教育、客服、创意写作…...
微服务与网关
什么是网关 背景 单体项目中,前端只用访问指定的一个端口8080,就可以得到任何想要的数据 微服务项目中,ip是不断变化的,端口是多个的 解决方案:网关 网关:就是网络的关口,负责请求的路由、转发、身份校验。 前段还是访问之前的端口8080即可 后端对于前端来说是透明的 网…...
Unity中实现动态图集算法
在 Unity 中,动态图集(Dynamic Atlas)是一种在运行时将多个纹理合并成一个大纹理图集的技术,这样可以减少渲染时的纹理切换次数,提高渲染效率。 实现原理: 动态图集的核心思想是在运行时动态地将多个小纹理…...
本地部署DeepSeek Nodejs版
目录 1.下载 Ollama 2.下载DeepSeek模型 3.下载 ollama.js 1.下载 Ollama https://ollama.com/ 下载之后点击安装,等待安装成功后,打开cmd窗口,输入以下指令: ollama -v 如果显示了版本号,则代表已经下载成功了。…...
字节跳动后端二面
📍1. 数据库的事务性质,InnoDB是如何实现的? 数据库事务具有ACID特性,即原子性、一致性、隔离性和持久性。InnoDB通过以下机制实现这些特性: 🚀 实现细节: 原子性:通过undo log实…...
TUSB422 MCU 软件用户指南
文章目录 TUSB422 MCU 软件用户指南 目录表格图表1. 介绍2. 配置2.1 通用配置2.2 USB-PD 3.0 支持2.3 VDM 支持 3. 代码 ROM/RAM 大小优化4. 通过 UART 调试4. 移植到其他微控制器 TUSB422 MCU 软件用户指南 摘要 本文档是 TUSB422 微控制器基于 Type-C 端口控制(…...
Django在终端创建项目(pycharm Windows)
1.选择目录 选择或新建一个文件夹,作为项目保存的地方 2.右键在终端打开 3.确定django-admin.exe安装位置 找到自己安装django时,django-admin.exe安装的位置,例如 4.运行命令 使用django-admin.exe的绝对路径,在刚才打开的终端…...
wordpress主题制作
工具/原料 <P><BR>使用divcss语言编写的html静态页面一个</P> <P>Macromedia Dreamweaver软件<BR></P> WordPress主题结构分析 1 1、index.php首页模板(最基本) ---- 1、header.php头部 ---- 2、sidebar.php侧边…...
echarts 3d中国地图飞行线
一、3D中国地图 1. 一定要使用 echarts 5.0及以上的版本; 2. echarts 5.0没有内置中国地图了。点击下载 china.json; 3. 一共使用了四层地图。 (1)第一层是中国地图各省细边框和展示南海诸岛; (2)第二层是…...
视频基础操作
1.1. 例子 读取mp4格式的视频,将每一帧改为灰度图,并且打上水印(“WaterMark”),并将其输出保存为out.mp4,在这个例子中可以看到视频读取,每帧数据处理,视频保存的整体流程简单示例 import cv…...
微信小程序 - 组件和样式
组件和样式介绍 在开 Web 网站的时候: 页面的结构由 HTML 进行编写,例如:经常会用到 div、p、 span、img、a 等标签 页面的样式由 CSS 进行编写,例如:经常会采用 .class 、#id 、element 等选择器 但在小程序中不能…...
在本地校验密码或弱口令 (windows)
# 0x00 背景 需求是验证服务器的弱口令,如果通过网络侧校验可能会造成账户锁定风险。在本地校验不会有锁定风险或频率限制。 # 0x01 实践 ## 1 使用 net use 命令 可以通过命令行使用 net use 命令来验证本地账户的密码。打开命令提示符(CMD࿰…...
【Elasticsearch】Elasticsearch检索方式全解析:从基础到实战(二)
接着上一篇文章;我们继续来研究es的复杂检索 文章目录 (1) bool用来做复合查询(2)Filter【结果过滤】(3)term(4)Aggregation(执行聚合) (1) bool用来做复合查询 复合语…...
游戏引擎学习第96天
讨论了优化和速度问题,以便简化调试过程 节目以一个有趣的类比开始,提到就像某些高端餐厅那样,菜单上充满了听起来陌生或不太清楚的描述,需要依靠服务员进一步解释。虽然这听起来有些奇怪,但实际上,它反映…...
(Xshell 8 + Xftp 8)下载安装miniconda至服务器指定目录+配置虚拟环境
一一一一 Xshell 8 Xftp 8均已登录,miniconda.sh安装包已经放在服务器指定目录中 二二二二 赋予脚本执行权限 chmod x Miniconda3-latest-Linux-x86_64.sh安装miniconda ./Miniconda3-latest-Linux-x86_64.sh -p /data1/huyan/zhangyifeng/miniconda3一直Enter…...
多机器人系统的大语言模型:综述
25年2月来自 Drexel 大学的论文“Large Language Models for Multi-Robot Systems: A Survey”。 大语言模型 (LLM) 的快速发展为多机器人系统 (MRS) 开辟新的可能性,从而增强通信、任务规划和人机交互。与传统的单机器人和多智体系统不同,MRS 带来独特…...
通用的将jar制作成docker镜像sh脚本
通用的将jar制作成docker镜像sh脚本 为了在将 JAR 制作成 Docker 镜像的过程中创建日志目录,可以对之前的脚本进行扩展。以下是改进后的脚本,会在镜像构建时在容器内创建日志目录,并将日志文件挂载到该目录下。 在生成的 Dockerfile 中添加…...
