python - 如何将 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
度数,这对我的场景没有帮助。
谢谢,文尼
解决方案
要转换一个,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
(阅读此处)。
推荐阅读
- python - 获取当前 url 页面 ref scrapy
- kernel - 如何获得 rbf 内核或 SVM 中任何自定义内核的权重?
- javascript - 使用 javascript 显示来自 sql 的数据,因为它是以 HTML 形式输入的
- image - 在 Matlab 中设置图像的深度
- apache-kafka - Kafka:在下一次重新平衡中无法分配增加的分区
- chromecast - iOS 12 Xcode 10 上缺少 Chromecast 按钮
- haskell - Mac 上 Haskell Gloss 中的鼠标处理程序
- c# - 使用 UIAutomation 时缺少控件,但使用 Inspect.exe 时没有
- c# - 在 Filter 中读取 Response.Body 流
- amazon-web-services - AWS 更新请求,可变参数