Understanding the order when reshaping a tensor(理解重塑张量时的顺序)
本文介绍了理解重塑张量时的顺序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
对于张量:
x = torch.tensor([
[
[[0.4495, 0.2356],
[0.4069, 0.2361],
[0.4224, 0.2362]],
[[0.4357, 0.6762],
[0.4370, 0.6779],
[0.4406, 0.6663]]
],
[
[[0.5796, 0.4047],
[0.5655, 0.4080],
[0.5431, 0.4035]],
[[0.5338, 0.6255],
[0.5335, 0.6266],
[0.5204, 0.6396]]
]
])
首先要将其拆分为2(x.Shape[0])张量,然后将它们合并。在这里,只要我得到正确的输出,我就不需要真正地拆分它,但在视觉上,拆分它然后再将它们合并在一起对我来说更有意义。
例如:
# the shape of the splits are always the same
split1 = torch.tensor([
[[0.4495, 0.2356],
[0.4069, 0.2361],
[0.4224, 0.2362]],
[[0.4357, 0.6762],
[0.4370, 0.6779],
[0.4406, 0.6663]]
])
split2 = torch.tensor([
[[0.5796, 0.4047],
[0.5655, 0.4080],
[0.5431, 0.4035]],
[[0.5338, 0.6255],
[0.5335, 0.6266],
[0.5204, 0.6396]]
])
split1 = torch.cat((split1[0], split1[1]), dim=1)
split2 = torch.cat((split2[0], split2[1]), dim=1)
what_i_want = torch.cat((split1, split2), dim=0).reshape(x.shape[0], split1.shape[0], split1.shape[1])
对于上面的结果,我认为直接重塑x.rehape([2,3,4])会起作用,它产生了正确的尺寸,但结果不正确。
总的来说,我是:
- 不确定如何将张量拆分为x.Shape[0]张量。
- 对重塑的工作原理感到困惑。大多数时候我都能把尺寸弄对,但数字的顺序总是错的。
谢谢
推荐答案
据我所知,你有一个形状为(B,C,H,W)的张量,你想把它转换成(B,H,C*W)。为此,您需要执行以下两个步骤
- 将
x
的维度重新排列为(B,H,C,W),以具有名为y
的新张量 - 将
y
重塑为(B,H,C*W)以获得最终结果
将x
重塑为(B,H,C,W)而不是(B,H,W,C)的原因是
- 您希望由具有相同行索引的
x
(即您通过1
、2
、3
、4
指示的3x2矩阵)的子矩阵行连接而成的结果中有一行。 - Pytorch的
reshape
函数以行为主的方式运行。
因此,需要将行放在彼此的顶部,以便重塑才能返回所需的顺序。
按照上述推理,获取what_i_want
的代码为
what_i_want = x.permute(0, 2, 1, 3).reshape(2, 3, 4)
这篇关于理解重塑张量时的顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:理解重塑张量时的顺序
猜你喜欢
- 我如何透明地重定向一个Python导入? 2022-01-01
- 使用 Cython 将 Python 链接到共享库 2022-01-01
- YouTube API v3 返回截断的观看记录 2022-01-01
- 使用公司代理使Python3.x Slack(松弛客户端) 2022-01-01
- CTR 中的 AES 如何用于 Python 和 PyCrypto? 2022-01-01
- 我如何卸载 PyTorch? 2022-01-01
- 检查具有纬度和经度的地理点是否在 shapefile 中 2022-01-01
- 计算测试数量的Python单元测试 2022-01-01
- 如何使用PYSPARK从Spark获得批次行 2022-01-01
- ";find_element_by_name(';name';)";和&QOOT;FIND_ELEMENT(BY NAME,';NAME';)";之间有什么区别? 2022-01-01