PyTorch --torch.cat张量拼接原理

在 PyTorch 的 torch.cat 函数中,out 参数用于指定输出张量的存储位置。是否使用 out 参数直接影响结果的存储方式和张量的内存行为。以下是详细解释:

  1. 不使用 out 参数(默认行为)
    含义:不提供 out 参数时,torch.cat 会创建一个新的张量来存储拼接后的结果,并返回这个新张量。
    特点:
    内存分配:PyTorch 会为结果分配新的内存空间。
    原张量不变:输入的原始张量(如 tensors 中的张量)不会被修改。
    返回新张量:返回的张量是独立的,与输入张量没有内存共享
  2. 使用 out 参数
    含义:通过 out 参数提供一个已存在的张量,torch.cat 将直接将结果写入该张量中,无需创建新张量。
    特点:
    内存复用:避免分配新内存,直接利用已有张量的内存空间。
    原张量被修改:out 指定的张量会被覆盖,其内容会被替换为拼接结果。
    形状匹配:out 张量的形状必须与拼接后的结果完全一致,否则会报错。

以下是关于 torch.cat 在不同 dim 下的拼接过程的公式化描述及可视化示例,用分块矩阵的形式呈现:


1. 数学公式化描述

1.1 沿 dim=0(行方向)拼接

假设:

  • 张量 A 的形状为 m × n m\times n m×n
  • 张量 B 的形状为 p × n p\times n p×n
  • 所有张量在非拼接维度(列数 n n n)必须一致。

拼接后的张量 C 形状为 ( m + p ) × n (m + p) \times n (m+p)×n,公式表示为: C = [ A B ] C = \begin{bmatrix}A \\B\end{bmatrix} C=[AB]
即:
C i , j = { A i , j , 若  1 ≤ i ≤ m , B i − m , j , 若  m + 1 ≤ i ≤ m + p . C_{i,j} = \begin{cases} A_{i,j}, & \text{若 } 1 \leq i \leq m, \\ B_{i-m,j}, & \text{若 } m+1 \leq i \leq m+p. \end{cases} Ci,j={Ai,j,Bim,j, 1im, m+1im+p.


1.2 沿 dim=1(水平/列方向)拼接

假设条件

  • 张量 A A A 的形状为 m × n m \times n m×n
  • 张量 B B B 的形状为 m × p m \times p m×p
  • 两个张量在非拼接维度(行维度 m m m)上必须保持一致

拼接操作
水平拼接后的张量 C C C 形状为 m × ( n + p ) m \times (n + p) m×(n+p),其数学表示为:

C = [ A B ] C = \begin{bmatrix} A & B \end{bmatrix} C=[AB]

元素级定义
C i , j = { A i , j 当  1 ≤ j ≤ n B i , j − n 当  n + 1 ≤ j ≤ n + p C_{i,j} = \begin{cases} A_{i,j} & \text{当 } 1 \leq j \leq n \\ B_{i,j-n} & \text{当 } n+1 \leq j \leq n+p \end{cases} Ci,j={Ai,jBi,jn 1jn n+1jn+p

维度说明

  • 行维度: m m m(保持不变)
  • 列维度: n + p n + p n+p A A A B B B 列数的总和)

2. 具体示例(使用数值矩阵)

张量拼接示例

示例 1:沿第 0 维度拼接 (dim=0)

输入张量

  • A = [ 1 2 3 4 ] ( 形状  2 × 2 ) A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} \quad (\text{形状 } 2 \times 2) A=[1324](形状 2×2)
  • B = [ 5 6 7 8 ] ( 形状  2 × 2 ) B = \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix} \quad (\text{形状 } 2 \times 2) B=[5768](形状 2×2)

拼接操作
C = concat ⁡ ( A , B , dim = 0 ) C = \operatorname{concat}(A, B, \text{dim}=0) C=concat(A,B,dim=0)

输出结果
C = [ 1 2 3 4 5 6 7 8 ] ( 形状  4 × 2 ) C = \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ \hline 5 & 6 \\ 7 & 8 \end{bmatrix} \quad (\text{形状 } 4 \times 2) C= 13572468 (形状 4×2)


示例 2:沿第 1 维度拼接 (dim=1)

输入张量

  • A = [ 1 2 3 4 ] ( 形状  2 × 2 ) A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} \quad (\text{形状 } 2 \times 2) A=[1324](形状 2×2)
  • B = [ 5 6 7 8 ] ( 形状  2 × 2 ) B = \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix} \quad (\text{形状 } 2 \times 2) B=[5768](形状 2×2)

拼接操作
C = concat ⁡ ( A , B , dim = 1 ) C = \operatorname{concat}(A, B, \text{dim}=1) C=concat(A,B,dim=1)

输出结果
C = [ 1 2 5 6 3 4 7 8 ] ( 形状  2 × 4 ) C = \begin{bmatrix} 1 & 2 & 5 & 6 \\ 3 & 4 & 7 & 8 \end{bmatrix} \quad (\text{形状 } 2 \times 4) C=[13245768](形状 2×4)

关键说明

  1. dim=0 表示垂直拼接(沿行方向堆叠)
  2. dim=1 表示水平拼接(沿列方向连接)
  3. 拼接维度的大小可以不同,但其他维度必须完全相同(例如 dim=1 拼接时,两个张量的行数必须相等)

以下是用表格形式展示 dim=0dim=1 的拼接结果:

沿 dim=0 拼接
初始张量 ( A )初始张量 ( B )拼接结果 ( C )(dim=0)
[[1, 2],[[5, 6],[[1, 2],
[3, 4]] [7, 8]] [3, 4],
形状:2×2形状:2×2 [5, 6],
[7, 8]]
形状:4×2
沿 dim=1 拼接
初始张量 ( A )初始张量 ( B )拼接结果 ( C )(dim=1)
[[1, 2],[[5, 6],[[1, 2, 5, 6],
[3, 4]] [7, 8]] [3, 4, 7, 8]]
形状:2×2形状:2×2形状:2×4

3. 关键点总结

  1. 维度一致性

    • dim=0:所有张量的列数(n)必须相同。
    • dim=1:所有张量的行数(m)必须相同。
  2. 拼接方向

    • dim=0:垂直方向拼接(行数相加)。
    • dim=1:水平方向拼接(列数相加)。
  3. 数学符号表示

    • dim=0 C = [ A B ] C = \begin{bmatrix} A \\ B \end{bmatrix} C=[AB]
    • dim=1 C = [ A B ] C = \begin{bmatrix} A & B \end{bmatrix} C=[AB]

5. 扩展示例(多维张量)

假设张量为三维(如图像的批处理):
A ∈ R B × C × H × W A \in \mathbb{R}^{B \times C \times H \times W} ARB×C×H×W
B ∈ R B ′ × C × H × W B \in \mathbb{R}^{B' \times C \times H \times W} BRB×C×H×W

  • 拼接 dim=0(批处理方向)
    C ∈ R ( B + B ′ ) × C × H × W C \in \mathbb{R}^{(B+B') \times C \times H \times W} CR(B+B)×C×H×W

以下是三维张量拼接的示例,使用分块矩阵的形式展示沿不同维度(dim=0, dim=1, dim=2)的拼接过程:


三维张量拼接示例

假设两个三维张量 ( A ) 和 ( B ),形状分别为:
- A ∈ R 2 × 3 × 2 (形状: 2 × 3 × 2 ) A \in \mathbb{R}^{2 \times 3 \times 2}(形状:2×3×2) AR2×3×2(形状:2×3×2
- B ∈ R 1 × 3 × 2 (形状: 1 × 3 × 2 ) B \in \mathbb{R}^{1 \times 3 \times 2} (形状:1×3×2) BR1×3×2(形状:1×3×2

1. 沿 dim=0 拼接(扩展第一个维度)
  • 拼接条件:除 dim=0 外,其他维度(3×2)必须一致。
  • 拼接结果形状 ( 2 + 1 ) × 3 × 2 = 3 × 3 × 2 (2 + 1) \times 3 \times 2 = 3 \times 3 \times 2 (2+1)×3×2=3×3×2
  • 数学表示
    C = [ A 1 A 2 B 1 ] C = \begin{bmatrix} A_{1} \\ A_{2} \\ B_{1} \end{bmatrix} C= A1A2B1
    其中 A 1 , A 2 A_1, A_2 A1,A2 A A A的两个“块”, B 1 B_1 B1 B B B的唯一块。
数值示例
  • 输入张量

    • A = [ [ 1 2 3 4 5 6 ] , [ 7 8 9 10 11 12 ] ] A = \begin{bmatrix} \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{bmatrix}, & \begin{bmatrix} 7 & 8 \\ 9 & 10 \\ 11 & 12 \end{bmatrix} \end{bmatrix} A= 135246 , 791181012
    • B = [ [ 13 14 15 16 17 18 ] ] B = \begin{bmatrix} \begin{bmatrix} 13 & 14 \\ 15 & 16 \\ 17 & 18 \end{bmatrix} \end{bmatrix} B= 131517141618
  • 拼接结果(dim=0
    C = [ [ 1 2 3 4 5 6 ] , [ 7 8 9 10 11 12 ] , [ 13 14 15 16 17 18 ] ] C = \begin{bmatrix} \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{bmatrix}, & \begin{bmatrix} 7 & 8 \\ 9 & 10 \\ 11 & 12 \end{bmatrix}, & \begin{bmatrix} 13 & 14 \\ 15 & 16 \\ 17 & 18 \end{bmatrix} \end{bmatrix} C= 135246 , 791181012 , 131517141618
    形状 3 × 3 × 2 3 \times 3 \times 2 3×3×2


2. 沿 dim=1 拼接(扩展第二个维度)
  • 拼接条件:除 dim=1 外,其他维度(2×2)必须一致。
  • 假设调整后的张量形状
    • A ∈ R 2 × 3 × 2 A \in \mathbb{R}^{2 \times 3 \times 2} AR2×3×2
      - B ∈ R 2 × 2 × 2 B \in \mathbb{R}^{2 \times 2 \times 2} BR2×2×2
  • 拼接结果形状 2 × ( 3 + 2 ) × 2 = 2 × 5 × 2 2 \times (3 + 2) \times 2 = 2 \times 5 \times 2 2×(3+2)×2=2×5×2
  • 数学表示
    C = [ A 1 B 1 A 2 B 2 ] C = \begin{bmatrix} A_{1} & B_{1} \\ A_{2} & B_{2} \end{bmatrix} C=[A1A2B1B2]
    其中 ( A 1 , A 2 ) ( A_1, A_2 ) (A1,A2) ( A ) ( A ) (A) 的块, ( B 1 , B 2 ) ( B_1, B_2 ) (B1,B2) B B B 的块。
数值示例
  • 输入张量
    - A = [ [ 1 2 3 4 5 6 ] , [ 7 8 9 10 11 12 ] ] A = \begin{bmatrix} \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{bmatrix}, & \begin{bmatrix} 7 & 8 \\ 9 & 10 \\ 11 & 12 \end{bmatrix} \end{bmatrix} A= 135246 , 791181012

    • B = [ [ 13 14 15 16 ] , [ 17 18 19 20 ] ] B = \begin{bmatrix} \begin{bmatrix} 13 & 14 \\ 15 & 16 \end{bmatrix}, & \begin{bmatrix} 17 & 18 \\ 19 & 20 \end{bmatrix} \end{bmatrix} B=[[13151416],[17191820]]
  • 拼接结果(dim=1
    C = [ [ 1 2 3 4 5 6 ] [ 13 14 15 16 ] , [ 7 8 9 10 11 12 ] [ 17 18 19 20 ] ] C = \begin{bmatrix} \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{bmatrix} \quad \begin{bmatrix} 13 & 14 \\ 15 & 16 \end{bmatrix}, & \begin{bmatrix} 7 & 8 \\ 9 & 10 \\ 11 & 12 \end{bmatrix} \quad \begin{bmatrix} 17 & 18 \\ 19 & 20 \end{bmatrix} \end{bmatrix} C= 135246 [13151416], 791181012 [17191820]
    形状 2 × 5 × 2 2 \times 5 \times 2 2×5×2


3. 沿 dim=2 拼接(扩展第三个维度)
  • 拼接条件:除 dim=2 外,其他维度(2×3)必须一致。
  • 假设调整后的张量形状
    • A ∈ R 2 × 3 × 2 A \in \mathbb{R}^{2 \times 3 \times 2} AR2×3×2
    • B ∈ R 2 × 3 × 3 B \in \mathbb{R}^{2 \times 3 \times 3} BR2×3×3
  • 拼接结果形状 ( 2 × 3 × ( 2 + 3 ) = 2 × 3 × 5 ) ( 2 \times 3 \times (2 + 3) = 2 \times 3 \times 5 ) (2×3×(2+3)=2×3×5)
  • 数学表示
    C = [ A 1 B 1 A 2 B 2 ] C = \begin{bmatrix} A_{1} & B_{1} \\ A_{2} & B_{2} \end{bmatrix} C=[A1A2B1B2]
    其中每个块在第三个维度上拼接。
数值示例
  • 输入张量

    • A = [ [ 1 2 3 4 5 6 ] , [ 7 8 9 10 11 12 ] ] A = \begin{bmatrix} \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{bmatrix}, & \begin{bmatrix} 7 & 8 \\ 9 & 10 \\ 11 & 12 \end{bmatrix} \end{bmatrix} A= 135246 , 791181012
      - B = [ [ 13 14 15 16 17 18 19 20 21 ] , [ 22 23 24 25 26 27 28 29 30 ] ] B = \begin{bmatrix} \begin{bmatrix} 13 & 14 & 15 \\ 16 & 17 & 18 \\ 19 & 20 & 21 \end{bmatrix}, & \begin{bmatrix} 22 & 23 & 24 \\ 25 & 26 & 27 \\ 28 & 29 & 30 \end{bmatrix} \end{bmatrix} B= 131619141720151821 , 222528232629242730
  • 拼接结果(dim=2
    C = [ [ 1 2 13 14 15 3 4 16 17 18 5 6 19 20 21 ] , [ 7 8 22 23 24 9 10 25 26 27 11 12 28 29 30 ] ] C = \begin{bmatrix} \begin{bmatrix} 1 & 2 & 13 & 14 & 15 \\ 3 & 4 & 16 & 17 & 18 \\ 5 & 6 & 19 & 20 & 21 \end{bmatrix}, & \begin{bmatrix} 7 & 8 & 22 & 23 & 24 \\ 9 & 10 & 25 & 26 & 27 \\ 11 & 12 & 28 & 29 & 30 \end{bmatrix} \end{bmatrix} C= 135246131619141720151821 , 791181012222528232629242730
    形状:$2 \times 3 \times 5 )


关键点总结

  1. 维度扩展方向

    • dim=0:增加第一个维度的大小(如批处理大小)。
    • dim=1:增加第二个维度的大小(如通道数或行数)。
    • dim=2:增加第三个维度的大小(如列数或深度)。
  2. 形状一致性

    • 所有输入张量在非拼接维度的形状必须完全一致。
  3. 应用场景

    • dim=0:合并不同批次的图像数据。
    • dim=1:在通道维度拼接特征图(如图像处理中的多模态数据)。
    • dim=2:扩展特征的维度(如时间序列中的时间步)。

通过上述示例和表格,可以直观理解三维张量在不同维度上的拼接逻辑。

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

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

相关文章

人工智能之数学基础:矩阵对角化的本质

本文重点 前面的课程中,我们学习了矩阵的对角化,基于对角化可以将矩阵A转变为对角矩阵D,但是你有没有想过,为什么要进行矩阵对角化,矩阵对角化究竟做了一件什么事情呢? 矩阵对角化的本质 几何解释: 从几何变换的角度看,矩阵对角化意味着我们找到了一组基,使得线性变…

ubuntu的ubuntu--vg-ubuntu--lv磁盘扩容

在我们安装ubuntu时,如果选择的是自动分区,就会按照逻辑卷的形式来分区,并且只分配100G其余的并不会被分配,这对我们大多数情况来说都是不合理的,所以,如何扩充呢 下面以一个小的案例来说明如何扩充 问题…

Redis BitMap 实现签到及连续签到统计

一、引言 用户签到功能是很多应用都离不开的一个板块,单词打开、QQ达人等等为我们所熟知,这项功能该如何实现呢,一些朋友可能想当然的觉得无非将每日的签到数据记录下来不就好了,不会去细想用谁记录,如何记录才合适。 …

前端国际化-插件模式

文章目录 Webpack 插件开发解析中文调用有道翻译 API生成 JSON 语言文件React 国际化实现 Webpack 插件开发 创建 i18n-webpack-plugin.js 插件:在 src 目录下扫描所有文件使用 babel-parser 解析 JavaScript/JSX 代码识别中文文本通过有道翻译 API 翻译生成 local…

IP属地和发作品的地址不一样吗

在当今这个数字化时代,互联网已经成为人们日常生活不可或缺的一部分。随着各大社交平台功能的不断完善,一个新功能——IP属地显示,逐渐走进大众视野。这一功能在微博、抖音、快手等各大平台上得到广泛应用,旨在帮助公众识别虚假信…

PP-ChatOCRv3新升级:多页PDF信息抽取支持自定义提示词工程,拓展大语言模型功能边界

文本图像信息抽取技术在自动化办公、建筑工程、教育科研、金融风控、医疗健康等行业领域具有广泛应用场景。2024年9月,飞桨低代码开发工具PaddleX中新增文本图像智能产线PP-ChatOCRv3,充分结合PaddleOCR的文本图像版面解析能力和文心一言语言理解优势&am…

算法刷题记录——LeetCode篇(1.2) [第11~20题](持续更新)

更新时间:2025-03-29 LeetCode题解专栏:实战算法解题 (专栏)技术博客总目录:计算机技术系列目录页 优先整理热门100及面试150,不定期持续更新,欢迎关注! 17. 电话号码的字母组合 给定一个仅包含数字 2-9…

如何在 vue 渲染百万行数据,vxe-table 渲染百万行数据性能对比,超大量百万级表格渲染

vxe-table 渲染百万行数据性能对比,超大量百万级表格渲染;如何在 vue 渲染百万行数据;当在开发项目时,遇到需要流畅支持百万级数据的表格时, vxe-table 就可以非常合适了,不仅支持强大的功能,虚…

阿里 FunASR 开源中文语音识别大模型应用示例(准确率比faster-whisper高)

文章目录 Github官网简介模型安装非流式应用示例流式应用示例 Github https://github.com/modelscope/FunASR 官网 https://www.funasr.com/#/ 简介 FunASR是一个基础语音识别工具包,提供多种功能,包括语音识别(ASR)、语音端…

如何使用 LLaMA-Factory 微调 LLaMA3

【LLaMa3微调】使用 LLaMA-Factory 微调LLaMA3 实验环境 1.1 机器 操作系统:Windows 10 或 UbuntuPyTorch 版本:2.1.0Python 版本:3.10(针对Ubuntu 22.04)Cuda 版本:12.1GPU 配置:p100 (16GB) …

使用Java ApI 实现Hadoop文件上传

目录 文件传输步骤 windows的本机文件传输 linux的虚拟机文件传输 文件传输步骤 建立连接 在connect2HDFS()方法中,通过设置Configuration对象来指定HDFS的URI(在这个例子中为hdfs://192.168.12.133:9000),并初始化一个FileSys…

喜讯 | 耘瞳科技视觉检测与测量装备荣膺“2024机器视觉创新产品TOP10”

3月28日,全球机器视觉行业盛会VisionChina2025(上海)机器视觉展完美收官。展会期间,由机器视觉产业联盟(CMVU)举办的“2024机器视觉创新产品TOP10”企业名单正式揭晓,耘瞳科技“工业跨尺度场景实…

数据可视化(matplotlib)-------图表样式美化

目录 一、图表样式概述 (一)、默认图表样式 (二)、图表样式修改 1、局部修改 2、全局修改 二、使用颜色 (一)、使用基础颜色 1、单词缩写或单词表示的颜色 2、十六进制/HTML模式表示的颜色 3、RGB…

202518 | Ngnix

Ngnix是什么 Nginx(发音为“engine-x”)是一个开源的高性能HTTP服务器、反向代理服务器、负载均衡器和邮件代理服务器。它由俄罗斯程序员Igor Sysoev开发,首次发布于2004年,旨在解决C10K问题(即如何高效地处理10,000个…

WP Mail 邮件发送:WordPress Mail SMTP设置

在我们WordPress搭建个人网站完成后,读者或者客户发送的电子邮件,包括你的WPForms电子邮件通知,如果无法到达预定收件人收件箱,这会对我们网站的运营造成很大的影响,问题在于WordPress Mail SMTP的发送方式。 SMTP&am…

小智机器人关键函数解析:MqttProtocol::SendAudio()对输入的音频数据进行加密处理,通过UDP发送加密后的音频数据

MqttProtocol::SendAudio()对输入的音频数据进行加密处理&#xff0c;通过UDP发送加密后的音频数据。 源码&#xff1a; void MqttProtocol::SendAudio(const std::vector<uint8_t>& data) {// 使用互斥锁保护临界区&#xff0c;确保同一时间只有一个线程可以访问该…

Hadoop 常用命令集总览

Hadoop 常用命令集总览 在大数据处理领域&#xff0c;Hadoop 作为一种广泛应用的分布式系统基础架构&#xff0c;其重要性不言而喻。熟练掌握 Hadoop 的常用命令对于高效的数据处理和分析工作至关重要。本文将对 Hadoop 的常用命令进行专业而详尽的列举&#xff0c;并结合实例进…

mac m4 Homebrew安装MySQL 8.0

1.使用Homebrew安装MySQL8 在终端中输入以下命令来安装MySQL8&#xff1a; brew install mysql8.0 安装完成后&#xff0c;您可以通过以下命令来验证MySQL是否已成功安装&#xff1a; 2.配置mysql环境变量 find / -name mysql 2>/dev/null #找到mysql的安装位置 cd /op…

GoLand 2024.3 中文 GO语言开发工具

GoLand 2024.3 中文 GO语言开发工具 文章目录 GoLand 2024.3 中文 GO语言开发工具一、介绍二、效果三、下载 一、介绍 JetBrains GoLand 2024 &#xff0c;是一款GO语言开发工具&#xff0c;全行代码补全&#xff1a;能使用本地运行的上下文感知深度学习模型&#xff0c;可以自…

Excel去掉单元格里面的换行的方法

方法一&#xff1a;使用“查找和替换”功能 ‌选中单元格‌&#xff1a;首先选中需要替换换行符的单元格或区域。 ‌打开替换窗口‌&#xff1a;按下“CtrlH”快捷键&#xff0c;打开“查找和替换”对话框。 ‌输入换行符‌&#xff1a; 在“查找内容”框中&#xff0c;你可…