【发布时间】:2021-01-25 10:11:09
【问题描述】:
所以我有一个形状为 [4,1,128,678] 的 4d 张量,我想将其查看/重塑为 [4,678,128]。
我必须对多个张量执行此操作,其中最后一个形状值 678 并不总是已知并且可能不同,所以[4,1,128,575]也应该转到[4,575,128]
你知道变换张量的最佳操作是什么吗?查看/重塑?以及如何?
谢谢
【问题讨论】:
标签: python deep-learning pytorch
所以我有一个形状为 [4,1,128,678] 的 4d 张量,我想将其查看/重塑为 [4,678,128]。
我必须对多个张量执行此操作,其中最后一个形状值 678 并不总是已知并且可能不同,所以[4,1,128,575]也应该转到[4,575,128]
你知道变换张量的最佳操作是什么吗?查看/重塑?以及如何?
谢谢
【问题讨论】:
标签: python deep-learning pytorch
您也可以使用(更少的编写和 IMO 更清洁):
# x.shape == (4, 1, 128, 678)
x.squeeze().permute(0, 2, 1)
如果您要使用view,您会丢失维度信息(但也许这正是您想要的),在这种情况下,它将是:
x.squeeze().view(4, -1, 128)
permute 对张量进行重新排序,而 shape 仅提供不同的视图没有重构底层内存。你可以看到这两个操作的区别in this StackOverflow answer。
【讨论】:
改用einops,它可以一次完成所有操作并验证已知尺寸:
from einops import reshape
y = rearrange(x, 'x 1 y z -> x z y', x=4, y=128)
【讨论】: