23

用途unsqueeze()

input = torch.Tensor(2, 4, 3) # input: 2 x 4 x 3
print(input.unsqueeze(0).size()) # prints - torch.size([1, 2, 4, 3])

用途view()

input = torch.Tensor(2, 4, 3) # input: 2 x 4 x 3
print(input.view(1, -1, -1, -1).size()) # prints - torch.size([1, 2, 4, 3])

根据文档,unsqueeze()在作为参数给定的位置插入单例 dim,并view()创建一个具有与tensor.

什么view()对我来说很清楚,但我无法将它与unsqueeze(). 此外,我不明白何时使用view()以及何时使用unsqueeze()

任何有良好解释的帮助将不胜感激!

4

2 回答 2

22

view()只能接受一个-1参数。

因此,如果要添加单例维度,则需要提供所有维度作为参数。例如,如果A是 2x3x4 张量,要添加单维,您需要执行A:view(2, 1, 3, 4).

但是,有时,在使用操作时,输入的维度是未知的。因此,我们不知道它A是 2x3x4,但我们仍然想插入一个单一维度。这在使用小批量张量时经常发生,其中最后一个维度通常是未知的。在这些情况下,nn.Unsqueeze 很有用,它允许我们在编写代码时插入维度而无需明确知道其他维度。

于 2017-03-22T21:37:42.690 回答
1

unsqueeze()是一个特例view()

为方便起见,许多 python 库都为更通用的函数的常见用途提供了简写别名。

  • view()将张量重塑为指定的形状
  • unsqueeze()通过添加深度为 1 的新维度来重塑张量
    (即将一个 nd 张量变成一个 n+1.d 张量)

何时使用unsqueeze()

一些示例用例:

  • 您有一个设计用于接收 RGB 图像张量 (3d: CxHxW) 的模型,但您的数据是 2d 灰度图像 ( HxW​​)
  • 您的模型设计用于接收批量数据 ( batch_size x dim1 x dim2 x ...),并且您希望为其提供单个样本(即批量大小为 1)。
于 2021-02-13T14:36:53.763 回答