马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
在 PyTorch 的 torch.cat 函数中,out 参数用于指定输出张量的存储位置。是否使用 out 参数直接影响效果的存储方式和张量的内存活动。以下是具体表明:
- 不使用 out 参数(默认活动)
寄义:不提供 out 参数时,torch.cat 会创建一个新的张量来存储拼接后的效果,并返回这个新张量。
特点:
内存分配:PyTorch 会为效果分配新的内存空间。
原张量稳固:输入的原始张量(如 tensors 中的张量)不会被修改。
返回新张量:返回的张量是独立的,与输入张量没有内存共享
- 使用 out 参数
寄义:通过 out 参数提供一个已存在的张量,torch.cat 将直接将效果写入该张量中,无需创建新张量。
特点:
内存复用:制止分配新内存,直接使用已有张量的内存空间。
原张量被修改:out 指定的张量会被覆盖,其内容会被更换为拼接效果。
外形匹配:out 张量的外形必须与拼接后的效果完全划一,否则会报错。
以下是关于 torch.cat 在差别 dim 下的拼接过程的公式化形貌及可视化示例,用分块矩阵的情势出现:
1. 数学公式化形貌
1.1 沿 dim=0(行方向)拼接
假设:
- 张量 A 的外形为 m×nm\times nm×n
- 张量 B 的外形为 p×np\times np×n
- 全部张量在非拼接维度(列数 nnn)必须划一。
拼接后的张量 C 外形为 (m+p)×n (m + p) \times n (m+p)×n,公式表现为:C=[AB]C = \begin{bmatrix}A \\B\end{bmatrix}C=[AB]
即:
Ci,j={Ai,j,若 1≤i≤m,Bi−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,Bi−m,j,若 1≤i≤m,若 m+1≤i≤m+p.
1.2 沿 dim=1(程度/列方向)拼接
假设条件:
- 张量 AAA 的外形为 m×nm \times nm×n
- 张量 BBB 的外形为 m×pm \times pm×p
- 两个张量在非拼接维度(行维度 mmm)上必须保持划一
拼接使用:
程度拼接后的张量 CCC 外形为 m×(n+p)m \times (n + p)m×(n+p),其数学表现为:
C=[AB]C = \begin{bmatrix} A & B \end{bmatrix}C=[AB]
元素级界说:
Ci,j={Ai,j当 1≤j≤nBi,j−n当 n+1≤j≤n+pC_{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,j−n当 1≤j≤n当 n+1≤j≤n+p
维度分析:
- 行维度:mmm(保持稳固)
- 列维度:n+pn + pn+p(AAA 和 BBB 列数的总和)
2. 具体示例(使用数值矩阵)
张量拼接示例
示例 1:沿第 0 维度拼接 (dim=0)
输入张量:
- A=[1234](外形 2×2)A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} \quad (\text{外形 } 2 \times 2) A=[1324](外形 2×2)
- B=[5678](外形 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=[12345678](外形 4×2)C = \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ \hline5 & 6 \\ 7 & 8 \end{bmatrix} \quad (\text{外形 } 4 \times 2)C=13572468(外形 4×2)
示例 2:沿第 1 维度拼接 (dim=1)
输入张量:
- A=[1234](外形 2×2) A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} \quad (\text{外形 } 2 \times 2) A=[1324](外形 2×2)
- B=[5678](外形 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=[12563478](外形 2×4)C = \begin{bmatrix} 1 & 2 & 5 & 6 \\ 3 & 4 & 7 & 8 \end{bmatrix} \quad (\text{外形 } 2 \times 4)C=[13245768](外形 2×4)
关键分析
- dim=0 表现垂直拼接(沿行方向堆叠)
- dim=1 表现程度拼接(沿列方向毗连)
- 拼接维度的巨细可以差别,但其他维度必须完全雷同(比方 dim=1 拼接时,两个张量的行数必须相称)
以下是用表格情势展示 dim=0 和 dim=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. 关键点总结
- 维度划一性:
- dim=0:全部张量的列数(n)必须雷同。
- dim=1:全部张量的行数(m)必须雷同。
- 拼接方向:
- dim=0:垂直方向拼接(行数相加)。
- dim=1:程度方向拼接(列数相加)。
- 数学符号表现:
- dim=0:C=[AB]C = \begin{bmatrix} A \\ B \end{bmatrix}C=[AB]
- dim=1:C=[AB]C = \begin{bmatrix} A & B \end{bmatrix}C=[AB]
5. 扩展示例(多维张量)
假设张量为三维(如图像的批处置惩罚):
A∈RB×C×H×W A \in \mathbb{R}^{B \times C \times H \times W} A∈RB×C×H×W
B∈RB′×C×H×WB \in \mathbb{R}^{B' \times C \times H \times W} B∈RB′×C×H×W
- 拼接 dim=0(批处置惩罚方向):
C∈R(B+B′)×C×H×WC \in \mathbb{R}^{(B+B') \times C \times H \times W}C∈R(B+B′)×C×H×W
以下是三维张量拼接的示例,使用分块矩阵的情势展示沿差别维度(dim=0, dim=1, dim=2)的拼接过程:
三维张量拼接示例
假设两个三维张量 ( A ) 和 ( B ),外形分别为:
-A∈R2×3×2(外形:2×3×2)A \in \mathbb{R}^{2 \times 3 \times 2}(外形:2×3×2)A∈R2×3×2(外形:2×3×2)
-B∈R1×3×2(外形:1×3×2)B \in \mathbb{R}^{1 \times 3 \times 2} (外形:1×3×2)B∈R1×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=[A1A2B1]C = \begin{bmatrix}A_{1} \\ A_{2} \\ B_{1}\end{bmatrix}C=A1A2B1
此中A1,A2A_1, A_2A1,A2 是 AAA的两个“块”,B1B_1B1是 BBB的唯一块。
数值示例:
- 输入张量:
- A=[[123456],[789101112]]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=[[131415161718]]B = \begin{bmatrix}\begin{bmatrix} 13 & 14 \\ 15 & 16 \\ 17 & 18 \end{bmatrix}\end{bmatrix}B=131517141618
- 拼接效果(dim=0):
C=[[123456],[789101112],[131415161718]]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×23 \times 3 \times 23×3×2
2. 沿 dim=1 拼接(扩展第二个维度)
- 拼接条件:除 dim=1 外,其他维度(2×2)必须划一。
- 假设调解后的张量外形:
- A∈R2×3×2 A \in \mathbb{R}^{2 \times 3 \times 2}A∈R2×3×2
-B∈R2×2×2B \in \mathbb{R}^{2 \times 2 \times 2}B∈R2×2×2
- 拼接效果外形:2×(3+2)×2=2×5×22 \times (3 + 2) \times 2 = 2 \times 5 \times 2 2×(3+2)×2=2×5×2
- 数学表现:
C=[A1B1A2B2]C = \begin{bmatrix}A_{1} & B_{1} \\A_{2} & B_{2}\end{bmatrix}C=[A1A2B1B2]
此中 (A1,A2)( A_1, A_2 )(A1,A2) 是 (A)( A )(A) 的块,(B1,B2)( B_1, B_2 )(B1,B2) 是 BBB 的块。
数值示例:
- 输入张量:
-A=[[123456],[789101112]]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=[[13141516],[17181920]]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=[[123456][13141516],[789101112][17181920]]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×22 \times 5 \times 22×5×2
3. 沿 dim=2 拼接(扩展第三个维度)
- 拼接条件:除 dim=2 外,其他维度(2×3)必须划一。
- 假设调解后的张量外形:
- A∈R2×3×2A \in \mathbb{R}^{2 \times 3 \times 2}A∈R2×3×2
- B∈R2×3×3B \in \mathbb{R}^{2 \times 3 \times 3}B∈R2×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=[A1B1A2B2]C = \begin{bmatrix}A_{1} & B_{1} \\A_{2} & B_{2}\end{bmatrix}C=[A1A2B1B2]
此中每个块在第三个维度上拼接。
数值示例:
- 输入张量:
- A=[[123456],[789101112]]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=[[131415161718192021],[222324252627282930]] 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=[[121314153416171856192021],[782223249102526271112282930]]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 )
关键点总结
- 维度扩展方向:
- dim=0:增长第一个维度的巨细(如批处置惩罚巨细)。
- dim=1:增长第二个维度的巨细(如通道数或行数)。
- dim=2:增长第三个维度的巨细(如列数或深度)。
- 外形划一性:
- 应用场景:
- dim=0:归并差别批次的图像数据。
- dim=1:在通道维度拼接特性图(如图像处置惩罚中的多模态数据)。
- dim=2:扩展特性的维度(如时间序列中的时间步)。
通过上述示例和表格,可以直观明白三维张量在差别维度上的拼接逻辑。
|