window patch按块分割矩阵

news2025/2/14 0:24:33

文章目录

  • 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 F

torch.set_printoptions(precision=3, sci_mode=False)

if __name__ == "__main__":
    run_code = 0
    batch_size = 2
    seq_len = 4
    model_dim = 6
    patch_total = batch_size * seq_len * model_dim
    patch = 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 F

torch.set_printoptions(precision=3, sci_mode=False)

if __name__ == "__main__":
    run_code = 0
    bs = 2
    num_patch = 16
    patch_depth = 4
    window_size = 2
    image_height = image_width = 4
    num_patch_in_window = window_size * window_size
    patch_total = bs * num_patch * patch_depth
    patch_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.shape
    window = 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.coloradmin.cn/o/2297619.html

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

相关文章

机器学习(李宏毅)——BERT

一、前言 本文章作为学习2023年《李宏毅机器学习课程》的笔记,感谢台湾大学李宏毅教授的课程,respect!!! 读这篇文章必须先了解self-attention、Transformer,可参阅我其他文章。 二、大纲 BERT简介self-…

深度学习-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 的优势(一)简洁易用(二)类型安全&#xff…

OpenWRT中常说的LuCI是什么——LuCI介绍(一)

我相信每个玩openwrt的小伙伴都或多或少看到过luci这个东西,但luci到底是什么东西,可能还不够清楚,今天就趁机来介绍下,openwrt中的luci,到底是个什么东西。 什么是LuCI? 首先,LuCI是OpenWRT中…

机器学习核心算法解析

机器学习核心算法解析 机器学习是人工智能的核心技术之一,它通过从数据中学习模式并做出预测或决策。本文将深入解析机器学习的核心算法,包括监督学习、无监督学习和强化学习,并通过具体案例和代码示例帮助读者理解这些算法的实际应用。 1. …

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 …

微服务与网关

什么是网关 背景 单体项目中,前端只用访问指定的一个端口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实…

Django在终端创建项目(pycharm Windows)

1.选择目录 选择或新建一个文件夹,作为项目保存的地方 2.右键在终端打开 3.确定django-admin.exe安装位置 找到自己安装django时,django-admin.exe安装的位置,例如 4.运行命令 使用django-admin.exe的绝对路径,在刚才打开的终端…

echarts 3d中国地图飞行线

一、3D中国地图 1. 一定要使用 echarts 5.0及以上的版本; 2. echarts 5.0没有内置中国地图了。点击下载 china.json; 3. 一共使用了四层地图。 (1)第一层是中国地图各省细边框和展示南海诸岛; (2)第二层是…

在本地校验密码或弱口令 (windows)

# 0x00 背景 需求是验证服务器的弱口令,如果通过网络侧校验可能会造成账户锁定风险。在本地校验不会有锁定风险或频率限制。 # 0x01 实践 ## 1 使用 net use 命令 可以通过命令行使用 net use 命令来验证本地账户的密码。打开命令提示符(CMD&#xff0…

【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 带来独特…

Python----PyQt开发(PyQt基础,环境搭建,Pycharm中PyQttools工具配置,第一个PyQt程序)

一、QT与PyQT的概念和特点 1.1、QT QT是一个1991年由The Qt Company开发的跨平台C图形用户界面应用程序开发 框架,可构建高性能的桌面、移动及Web应用程序。也可用于开发非GUI程序,比如 控制台工具和服务器。Qt是面向对象的框架,使用特殊的代…

MT6835 21位 磁编码器 SPI 平台无关通用驱动框架 STM32

MT6835 21位 磁编码器 SPI 平台无关通用驱动框架 STM32 1. 获取代码:2. 加入你的项目2.1 以 STM32 为例:2.2 以 ESP-IDF 为例: 3. 对接 API3.1 以 STM32 为例: 4. 更多函数说明5. 写入 EEPROM 示例 MT6835 Framework 纯C语言实现,跨平台&…