【发布时间】:2021-11-25 11:50:58
【问题描述】:
让我有一个张量维度 (B, N^2, C) 然后我将它重塑为 (B, C, N, N)。
我认为我有以下两种选择
A = torch.rand(5, 100, 20) # Original Tensor
# First Method
B = torch.transpose(2, 1)
B = B.view(5, 20, 10, 10)
# Second Method
C = A.view(5, 20, 10, 10)
两种方法都有效,但输出略有不同,我无法理解它们之间的区别。
谢谢
【问题讨论】:
-
首先不清楚 torch.transpose 不会引发错误,因为您只传递了 2 个参数 pytorch.org/docs/stable/generated/torch.transpose.html 。但是,如果您确实设法使用该方法转置 A,则预期输出会有所不同。 A[0].reshape(20,10,10) 不同于 A[0].transpose.reshape(20,10,10)。查看重塑的详细内容,torch 或 nunmpy 文档没有详细介绍,但这里有一个快速指南:blog.finxter.com/numpy-reshape。理解它的一种简单方法是重塑保留数据的顺序,而转置则不会。
-
因为你在重新整形之前对 B 进行了转置,所以输出矩阵确实不同。假设您有一个 2x2 矩阵,并且在将其转换为一维数组之前对其进行转置,它当然会与非转置矩阵不同,即使其中的值相同,只是顺序不同
标签: python numpy view pytorch reshape