Torch 中的 view() 和 unsqueeze() 有什么区别?
What is the difference between view() and unsqueeze() in Torch?
使用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()
?
任何有好的解释的帮助将不胜感激!
view()
只能接受一个 -1
参数。
因此,如果您想添加单例维度,则需要提供所有维度作为参数。例如,如果 A
是一个 2x3x4 张量,要添加单例维度,您需要执行 A:view(2, 1, 3, 4)
.
但是,有时在使用操作时输入的维度是未知的。因此,我们不知道 A
是 2x3x4,但我们仍然想插入一个单例维度。当使用张量的小批量时,这种情况经常发生,其中最后一个维度通常是未知的。在这些情况下,nn.Unsqueeze 很有用,它让我们在编写代码时无需明确知道其他维度即可插入维度。
unsqueeze()
是 view()
的 特例
为方便起见,许多 python 库都有常用函数的简写别名。
view()
将张量重塑为指定的形状
unsqueeze()
通过添加深度为 1
的新维度来重塑张量
(即将 n.d 张量转换为 n+1.d 张量)
何时使用 unsqueeze()
?
一些示例用例:
- 您有一个设计用于接收 RGB 图像张量 (3d:
CxHxW
) 的模型,但您的数据是二维灰度图像 (HxW
)
- 您的模型旨在接收成批数据 (
batch_size x dim1 x dim2 x ...
),而您希望为其提供单个样本(即大小为 1 的批次)。
使用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()
?
任何有好的解释的帮助将不胜感激!
view()
只能接受一个 -1
参数。
因此,如果您想添加单例维度,则需要提供所有维度作为参数。例如,如果 A
是一个 2x3x4 张量,要添加单例维度,您需要执行 A:view(2, 1, 3, 4)
.
但是,有时在使用操作时输入的维度是未知的。因此,我们不知道 A
是 2x3x4,但我们仍然想插入一个单例维度。当使用张量的小批量时,这种情况经常发生,其中最后一个维度通常是未知的。在这些情况下,nn.Unsqueeze 很有用,它让我们在编写代码时无需明确知道其他维度即可插入维度。
unsqueeze()
是 view()
的 特例
为方便起见,许多 python 库都有常用函数的简写别名。
view()
将张量重塑为指定的形状unsqueeze()
通过添加深度为 1
的新维度来重塑张量 (即将 n.d 张量转换为 n+1.d 张量)
何时使用 unsqueeze()
?
一些示例用例:
- 您有一个设计用于接收 RGB 图像张量 (3d:
CxHxW
) 的模型,但您的数据是二维灰度图像 (HxW
) - 您的模型旨在接收成批数据 (
batch_size x dim1 x dim2 x ...
),而您希望为其提供单个样本(即大小为 1 的批次)。