Pytorch 如何使用Pytork';s视图功能是否正确?

Pytorch 如何使用Pytork';s视图功能是否正确?,pytorch,Pytorch,我有一个大小为x={4,2,C,H,W}的张量。我需要将它重塑为y={8,C,H,W},但是我想确保图像以正确的顺序存储,所以说x[1,0,:,:,,:,:,:]处的图像必须等于y[2,C,H,W]。我知道我可以使用查看功能,但我不知道如何正确使用它 目前我正在这样做 feat_imgs_all = feat_imgs_all.view( rgb.shape[0], rgb.shape[1], feat_imgs_all.shape[1], feat_imgs_all.shap

我有一个大小为x={4,2,C,H,W}的张量。我需要将它重塑为y={8,C,H,W},但是我想确保图像以正确的顺序存储,所以说x[1,0,:,:,,:,:,:]处的图像必须等于y[2,C,H,W]。我知道我可以使用查看功能,但我不知道如何正确使用它

目前我正在这样做

feat_imgs_all = feat_imgs_all.view(
    rgb.shape[0], rgb.shape[1], feat_imgs_all.shape[1], 
    feat_imgs_all.shape[2], feat_imgs_all.shape[3])

这似乎真的很难理解,有没有一种方法可以只输入前两个形状,然后pytorch计算出其余的形状?

您可以使用
展平
结束\u dim
参数轻松完成此操作,请参见:

view
也可以使用,如下所示,尽管它既不太可读也不太令人愉快:

import torch

a = torch.randn(4, 2, 32, 64, 64)
flattened = a.view(-1, *a.shape[2:])

torch.all(flattened[2, ...] == a[1, 0, ...]) # True as well

这是编写单元测试的绝佳机会:-)
import torch

a = torch.randn(4, 2, 32, 64, 64)
flattened = a.view(-1, *a.shape[2:])

torch.all(flattened[2, ...] == a[1, 0, ...]) # True as well