pytorch中的拼接函数:cat()和stack()

文章目录

  • Ⅰ. cat([ Tensor a, Tensor b, ..., ...], dim = i )%a b c ... 个数为n
    • 一、作用
    • 二、常用
    • 三、特殊
    • 四、代码
  • Ⅱ. stack([ Tensor a, Tensor b, ..., ...], dim = i ]) %a b c ... 个数为n
    • 一、作用
    • 二、常用
    • 三、特殊
    • 四、代码

Ⅰ. cat([ Tensor a, Tensor b, …, …], dim = i )%a b c … 个数为n

一、作用

1-1. 各Tensor在第i个维度上拼接。各Tensor非拼接的维度上的维度数必须相同。见In[9]。 注:Tensor的维度指Tensor的索引值;如a = torch.size([2, 3, 4]),Tensor a第0维度上有2个维度、Tensor a第一维度上有3个维度等。

二、常用

2-1. 见代码In[8]

三、特殊

3-1. 意义:每张图片由原来RGB3个通道,变成了RGBα四个通道。见In[12] 。由两张半张照片拼接成一张照片,见In[16]。

四、代码

In[6]: a = torch.rand(4, 3, 32, 32)
In[7]: b = torch.rand(5, 3, 32, 32)
In[8]: torch.cat([a, b], dim = 0).shape
Out[8]: torch.Size([9, 3, 32, 32])
In[9]: torch.cat([a, b], dim = 1).shape
Traceback (most recent call last):
  File "E:\miniconda\install-file\lib\site-packages\IPython\core\interactiveshell.py", line 3397, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "", line 1, in <cell line: 1>
    torch.cat([a, b], dim = 1).shape
RuntimeError: Sizes of tensors must match except in dimension 1. Expected size 4 but got size 5 for tensor number 1 in the list.
In[10]: a = torch.rand(4, 3, 32, 32)
In[11]: b = torch.rand(4, 1, 32, 32)
In[12]: torch.cat([a, b], dim = 1).shape
Out[12]: torch.Size([4, 4, 32, 32])
In[13]: a = torch.rand(4, 3, 32, 32)
In[14]: a = torch.rand(4, 3, 16, 32)
In[15]: b = torch.rand(4, 3, 16, 32)
In[16]: torch.cat([a, b], dim = 2).shape
Out[16]: torch.Size([4, 3, 32, 32])

Ⅱ. stack([ Tensor a, Tensor b, …, …], dim = i ]) %a b c … 个数为n

一、作用

1-1. 在原Tensor维度前增加一个维度。且该Tensor维度上的维度数为n,所有Tensor的Tensor维度上的维度数相同,见In[9] In[10]。

二、常用

2-1. 见In[5] In[8]

三、特殊

3-1. 意义:插入的维度上有两个维度,用一个维度表示Tensor a照片的一半,用另一个维度表示Tensor b照片的一半,见In[5]。插入的维度上有两个维度,可用来表示两个班级学生各科成绩单。

四、代码

In[2]: import torch
In[3]: a = torch.rand(4, 3, 16, 32)
In[4]: b = torch.rand(4, 3, 16, 32)
In[5]: torch.stack([a, b], dim = 2).shape
Out[5]: torch.Size([4, 3, 2, 16, 32])
In[6]: a = torch.rand(32, 8)
In[7]: b = torch.rand(32, 8)
In[8]: torch.stack([a, b], dim = 0).shape
Out[8]: torch.Size([2, 32, 8])
In[9]: a = torch.rand(32, 8)
In[10]: b = torch.rand(30, 8)
In[11]: torch.stack([a, b], dim = 0).shape
Traceback (most recent call last):
  File "E:\miniconda\install-file\lib\site-packages\IPython\core\interactiveshell.py", line 3397, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "", line 1, in <cell line: 1>
    torch.stack([a, b], dim = 0).shape
RuntimeError: stack expects each tensor to be equal size, but got [32, 8] at entry 0 and [30, 8] at entry 1

你可能感兴趣的:(pytorch,pytorch,深度学习,神经网络)