如何使用TorchVision变换调整5D PyTorchTensor的大小?

xriantvc  于 2023-03-02  发布在  其他
关注(0)|答案(1)|浏览(109)

我试图在CNN中调整一个5D PyTorchTensor的大小,但是我遇到了一些麻烦。我已经附上了我的代码和我得到的错误。

import torchvision.transforms.functional as TF
import numpy as np

a = torch.rand((1, 3, 20, 376, 376))

b = TF.resize(a, (200, 200))
  • 值错误:输入和输出必须具有相同的空间维数,但输入的空间维数为[20,376,376],输出大小为[200,200]。请以(N,C,d1,d2,...,dK)格式提供输入Tensor,以(o 1,o2,...,oK)格式提供输出大小。*

5DTensor具有以下尺寸:
(1、3、20、376、376),对应于(批量、通道、深度、高度、宽度)。
Tensor的最后3个维度是指通过网络的3D图像的维度。我想调整最后两个维度,高度和宽度。任何指导都将不胜感激。谢谢!
不幸的是,我不能把Tensor转换成numpy数组,调整大小,然后再把它们转换成Tensor,因为我会丢失训练中梯度下降所需的梯度。

qyswt5oh

qyswt5oh1#

使用TF.resize的一种方法是展平批维和深度维,执行调整大小,然后恢复初始深度维:

>>> a_flat = a.swapaxes(1,2).flatten(0,1)     # (B*D, C,  H,   W)
>>> c = TF.resize(a_flat , (200, 200))        # (B*D, C, 200, 200)
>>> b = b.view(*a.shape[:3], *c.shape[-2:])   # (B, D, C, 200, 200)

相关问题