使用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()在作为参数给出的位置插入单身昏暗,view()创建一个与tensor
相关联的存储维度不同的视图。
view()对我来说很清楚,但我无法将其与unsqueeze()区分开来。此外,我不知道何时使用view()以及何时使用unsqueeze()?
任何有关良好解释的帮助都将不胜感激!
答案 0 :(得分:16)
view()只能取一个“-1”参数。
因此,如果要添加单个维度,则需要提供所有维度作为参数。例如,如果A是2x3x4张量,要添加单个维度,则需要执行A:view(2,1,3,4)。
但是,有时,在使用操作时,输入的维度是未知的。因此,我们不知道A是2x3x4,但我们仍然希望插入单个维度。当使用张量的张量时,这种情况会发生很多,其中最后一个维度通常是未知的。在这些情况下,nn.Unsqueeze非常有用,我们可以在编写代码时插入维度而无需显式地了解其他维度。
答案 1 :(得分:0)
unsqueeze()
是 view()
为方便起见,许多 Python 库都有简写别名,用于更通用的函数的常见用途。
view()
将张量重塑为指定的形状unsqueeze()
通过添加深度为 1 的新维度来重塑张量unsqueeze()
?一些示例用例:
CxHxW
) 的模型,但您的数据是 2d 灰度图像 (HxW
)batch_size x dim1 x dim2 x ...
),并且您希望为其提供单个样本(即大小为 1 的批次)。