首页 > 解决方案 > 如何将 Torch 张量旋转随机度数

问题描述

作为训练 CNN 的一部分,我正在使用一个inputs包含<class 'torch.Tensor'>对象的数组。我想将单个<class 'torch.Tensor'>对象旋转一些随机度数x,如下所示:

def rotate(inputs, x):
    # Rotate inputs[0] by x degrees, x can take on any value from 0 - 180 degrees

我怎样才能做到这一点?对于现有的实现,我只能发现它torch有一个rot90功能,但这将我限制在多个90度数,这对我的场景没有帮助。

谢谢,文尼

标签: pythonrotationpytorch

解决方案


要转换一个,torch.tensor您可以使用scipy.ndimage.rotate函数(在此处阅读),它可以旋转 a,torch.tensor但也可以将其转换为numpy.ndarray,因此您必须将其转换回torch.tensor。请参阅这个玩具示例。

功能:

def rotate(inputs, x):
    return torch.from_numpy(ndimage.rotate(inputs, x, reshape=False))

详细解释:

import torch
from scipy import ndimage
alpha = torch.rand(3,3)
print(alpha.dtype)#torch.float32

angle_in_degrees = 45
output = ndimage.rotate(alpha, angle_in_degrees, reshape=False)

print(output.dtype) #numpy_array

output = torch.from_numpy(output) #convert it back to torch tensor

print(output.dtype)  #torch.float32

此外,如果可能的话,您可以在将 PIL 图像转换为张量之前直接转换它。要转换 PIL 图像,您可以使用 PyTorch 内置torchvision.transforms.functional.rotate(阅读此处)。


推荐阅读