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 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.]]])

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

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

相关文章

excel里的函数技巧(持续更新中)

行转列 在 Excel 中,行转列(将一行数据转换为一列,或者将一列数据转换为一行)是一项常见的操作。你可以使用 转置 功能轻松实现这一操作。 TRANSPOSE(数组)

#渗透测试#批量漏洞挖掘#29网课交单平台 SQL注入

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。 目录 1. 漏洞原理 2. 漏洞定位 3. 攻击验证示…

我用AI做数据分析之四种堆叠聚合模型的比较

我用AI做数据分析之四种堆叠聚合模型的比较 这里AI数据分析不仅仅是指AI生成代码的能力,我想是测试AI数据分析方面的四个能力,理解人类指令的能力、撰写代码的能力、执行代码的能力和解释结果的能力。如果这四个能力都达到了相当的水准,才可…

机器学习 - 机器学习模型的评价指标

为了衡量一个机器学习模型的好坏,需要给定一个测试集,用模型对测试集 中的每一个样本进行预测,并根据预测结果计算评价分数。本文,我们来了解一下机器学习模型常用的评价指标。 一、分类问题常用到的混淆矩阵 在分类任务中&…

ChatGPT macOS 桌面应用让你的编程体验更上一层楼

高效开发必备:ChatGPT macOS 桌面应用亮点盘点 ©作者|Ninja Geek 来源|神州问学 通过 macOS 版 ChatGPT 应用,已经能够更好的和你的生产力工具无缝配合工作。 大概在三四周之前,Anthropic 在 Claude 上推出了一项名为 Computer Use 的功…

DeepSeek之Api的使用(将DeepSeek的api集成到程序中)

一、DeepSeek API 的收费模式 前言:使用DeepSeek的api是收费的 免费版: 可能提供有限的免费额度(如每月一定次数的 API 调用),适合个人开发者或小规模项目。 付费版: 超出免费额度后,可能需要按…

蓝桥杯(B组)-每日一题

题目: 思路: 首先将所有牛分类 1.a第一头母牛-每年年初生一头小母牛 2.不能生小牛的牛: b1-一岁小母牛 b2-二岁小母牛 b3-三岁小母牛 超过4岁就会再生一头小牛 因此计算每年生的小牛是第一头生的a再加上4岁后的生的 代码实现&#xff1…

deepseek+ollama+anythingLLM搭建本地知识库AI的笔记

所有内容都安装在docker里,安装完ollama后,在其bash里: ollama run deepseek-r1:1.5b 于是就安装好了deepseek, 再安装anythingLLM有点坑: export STORAGE_LOCATION$HOME/anythingllm && \ mkdir -p $STORAGE_LOCATIO…

Python中的json文件操作

1.1 基础知识 什么是JSON:(JavaScript Object Notation)是一种简洁、易读的数据语言,广泛用于数据交换、文档储存和web开发;适合数据量大,不要求保留原有的数据类型。导入:import json&#xf…

使用JavaScript设计一款简单的数字时钟

本文目录 使用 JavaScript 设计一款带日期显示的数字时钟效果预览1. 项目概述2. HTML 结构代码说明 3. CSS 样式代码说明 4. JavaScript 逻辑代码说明 5. 运行效果 使用 JavaScript 设计一款带日期显示的数字时钟 本文将详细介绍如何使用 HTML、CSS 和 JavaScript 设计一款带日…

PPDock:复旦大学团队研发的蛋白质-配体“盲对接“技术

PPDock: Pocket Prediction-Based Protein−Ligand Blind Docking 发表于Journal of Chemical Information and Modeling,第一作者为 Jie Du,通讯作者为 Manning Wang,研究团队来自复旦大学。该研究提出一种新的基于口袋预测的蛋白质 - 配体盲…

VSCode C/C++ 开发环境完整配置及常见问题(自用)

这里主要记录了一些与配置相关的内容。由于网上教程众多,部分解决方法并不能完全契合我遇到的问题,因此我选择以自己偏好的方式,对 VSCode 进行完整的配置,并记录在使用过程中遇到的问题及解决方案。后续内容也会持续更新和完善。…

系统漏洞扫描服务:安全风险识别与防护指南

系统安全的关键在于漏洞扫描服务,此服务能迅速发现潜在的安全风险。借助专业的扫描工具和技术,它确保系统稳定运作。以下将简要介绍这一服务的主要特点。 扫描原理 系统漏洞扫描服务依赖两种主要手段:一是通过漏洞数据库进行匹配&#xff0…

MVC(Model-View-Controller)framework using Python ,Tkinter and SQLite

1.项目结构 sql: CREATE TABLE IF NOT EXISTS School (SchoolId TEXT not null, SchoolName TEXT NOT NULL,SchoolTelNo TEXT NOT NULL) 整体思路 Model:负责与 SQLite 数据库进行交互,包括创建表、插入、删除、更新和查询数据等操作。View&#xff1…

Xcode证书密钥导入

证书干嘛用 渠道定期会给xcode证书,用来给ios打包用,证书里面有记录哪些设备可以打包进去。 怎么换证书 先更新密钥 在钥匙串访问中,选择系统。(选登录也行,反正两个都要导入就是了)。 mac中双击所有 .p12 后缀的密钥&#xff…

【学习笔记】计算机网络(三)

第3章 数据链路层 文章目录 第3章 数据链路层3.1数据链路层的几个共同问题3.1.1 数据链路和帧3.1.2 三个基本功能3.1.3 其他功能 - 滑动窗口机制 3.2 点对点协议PPP(Point-to-Point Protocol)3.2.1 PPP 协议的特点3.2.2 PPP协议的帧格式3.2.3 PPP 协议的工作状态 3.3 使用广播信…

最新版Edge浏览器集成ActiveX控件之金山WpsDocFrame控件

背景 WpsDocFrame控件‌是由金山公司开发的ActiveX控件,主要用于OA系统中,支持在浏览器中嵌入WPS文档的查看和编辑功能。 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品,致力于将浏览器插件重新应用到所有…

计算机网络结课设计:通过思科Cisco进行中小型校园网搭建

上学期计算机网络课程的结课设计是使用思科模拟器搭建一个中小型校园网,当时花了几天时间查阅相关博客总算是做出来了,在验收后一直没管,在寒假想起来了简单分享一下,希望可以给有需求的小伙伴一些帮助 目录 一、设计要求 二、…

mars3d接入到uniapp的时候ios上所有地图的瓦片都无法加载解决方案

用的是【Mars3d】官网的uniapp的仓库,安卓没有问题,但是ios的不行 相关链接 mars3d-uni-app: uni-app技术栈下的Mars3D项目模板 解决方案:感觉所有图片请求全被拦截了 uniapp的ios内核不允许跨域,需要先把瓦片下载后转base64&…

springboot019高校心理教育辅导

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