PyTorch 中如何使用 cat 方法?

推荐答案

在 PyTorch 中,torch.cat() 方法用于将多个张量沿指定维度进行拼接。其基本语法如下:

  • tensors:一个包含多个张量的序列(如列表或元组),这些张量将被拼接。
  • dim:指定沿哪个维度进行拼接。默认值为 0,即沿第一个维度拼接。
  • out:可选参数,指定输出张量。

示例代码

-- -------------------- ---- -------
------ -----

- ---- --- ---
------- - ----------------- -- --- --- -- ----
------- - ----------------- -- --- ---- --- -----

- -- - ------
------ - ------------------- --------- ------
-------------
- ---
- --------- --  --  ---
-         - --  --  ---
-         - --  --  ---
-         ---- --- -----

- -- - ------
------ - ------------------- --------- ------
-------------
- ---
- --------- --  --  --  --  --  ---
-         - --  --  -- --- --- -----

本题详细解读

1. torch.cat() 的作用

torch.cat() 是 PyTorch 中用于拼接张量的函数。它可以将多个张量沿指定的维度进行拼接,生成一个新的张量。与 torch.stack() 不同,torch.cat() 不会增加新的维度,而是在现有维度上进行扩展。

2. 参数详解

  • tensors:这是一个包含多个张量的序列(如列表或元组)。这些张量必须具有相同的形状,除了在拼接维度上可以不同。

  • dim:指定沿哪个维度进行拼接。例如,dim=0 表示沿第 0 维(行)拼接,dim=1 表示沿第 1 维(列)拼接。默认值为 0

  • out:可选参数,用于指定输出张量。如果提供了 out 参数,结果将直接写入该张量中。

3. 使用场景

torch.cat() 常用于以下场景:

  • 将多个特征图在通道维度上拼接。
  • 将多个序列在时间维度上拼接。
  • 将多个样本在批次维度上拼接。

4. 注意事项

  • 所有输入张量在非拼接维度上的形状必须相同。
  • 拼接后的张量在拼接维度上的大小是输入张量在该维度上大小的总和。

5. 与 torch.stack() 的区别

  • torch.cat() 不会增加新的维度,而是在现有维度上进行扩展。
  • torch.stack() 会在新的维度上拼接张量,因此会增加一个新的维度。

6. 示例代码解析

在示例代码中,我们创建了两个形状为 2x3 的张量 tensor1tensor2。通过 torch.cat(),我们分别沿第 0 维和第 1 维进行了拼接,得到了不同形状的输出张量。

  • 沿第 0 维拼接时,输出张量的形状为 4x3
  • 沿第 1 维拼接时,输出张量的形状为 2x6

这些操作展示了 torch.cat() 在不同维度上的拼接效果。

纠错
反馈