torch.cat 和 torchvision.transforms 的组合利兹到零张量
Combination of torch.cat and torchvision.transforms leeds to zero tensor
我想向张量的第四层中的图像添加更多信息,前三层基于图像。之后我想从图像中切出和平(数据增强)并且必须将图像调整为给定大小。
为此,我从一张图片创建了一个张量,并使用 torch.cat 将它与带有一层附加信息的张量连接起来。 (几乎但并非所有第二个张量的条目都为零。)
我通过 transforms.compose 发送了结果(剪切和调整张量大小)但之后张量完全由零组成。
这里我建立了一个可重现的例子。
import torch
from torchvision import transforms
height = 2
width = 4
resize = 2
tensor3 = torch.rand(3,height,width)
tensor1 = torch.zeros(1,height,width)
#tensor1 = torch.rand(1,height,width)
imageToTensor = transforms.ToTensor()
tensorToImage = transforms.ToPILImage()
train_transform = transforms.Compose([
transforms.RandomResizedCrop(resize, scale=(0.9, 1.0)),
transforms.ToTensor(),
])
tensor4 = torch.cat((tensor3,tensor1),0)
image4 = tensorToImage(tensor4)
transformed_image4 = train_transform(image4)
print(tensor4)
print(transformed_image4)
tensor([[[0.6774, 0.5293, 0.4420, 0.2463],
[0.1391, 0.7481, 0.3436, 0.9391]],
[[0.0652, 0.2061, 0.2931, 0.6126],
[0.2618, 0.3506, 0.5095, 0.7351]],
[[0.8555, 0.6320, 0.9461, 0.0928],
[0.2094, 0.3944, 0.0528, 0.7900]],
[[0.0000, 0.0000, 0.0000, 0.0000],
[0.0000, 0.0000, 0.0000, 0.0000]]])
tensor([[[0., 0.],
[0., 0.]],
[[0., 0.],
[0., 0.]],
[[0., 0.],
[0., 0.]],
[[0., 0.],
[0., 0.]]])
如果我选择“tensor1 = torch.rand(1,height,width)”我就没有这个问题。但如果大多数条目为零,我有。
使用 scale=(0.5, 1.0) 我也没有问题。
没有一些问题:
如何使用非零条目调整前三层的大小?
是我理解错了什么,还是真的很奇怪?
我创建了一个问题:
https://github.com/pytorch/pytorch/issues/22611
答案是 Torchvision 只支持 PIL-Images。
另一种方法是 albumentations-library 进行转换。
我想向张量的第四层中的图像添加更多信息,前三层基于图像。之后我想从图像中切出和平(数据增强)并且必须将图像调整为给定大小。
为此,我从一张图片创建了一个张量,并使用 torch.cat 将它与带有一层附加信息的张量连接起来。 (几乎但并非所有第二个张量的条目都为零。)
我通过 transforms.compose 发送了结果(剪切和调整张量大小)但之后张量完全由零组成。
这里我建立了一个可重现的例子。
import torch
from torchvision import transforms
height = 2
width = 4
resize = 2
tensor3 = torch.rand(3,height,width)
tensor1 = torch.zeros(1,height,width)
#tensor1 = torch.rand(1,height,width)
imageToTensor = transforms.ToTensor()
tensorToImage = transforms.ToPILImage()
train_transform = transforms.Compose([
transforms.RandomResizedCrop(resize, scale=(0.9, 1.0)),
transforms.ToTensor(),
])
tensor4 = torch.cat((tensor3,tensor1),0)
image4 = tensorToImage(tensor4)
transformed_image4 = train_transform(image4)
print(tensor4)
print(transformed_image4)
tensor([[[0.6774, 0.5293, 0.4420, 0.2463],
[0.1391, 0.7481, 0.3436, 0.9391]],
[[0.0652, 0.2061, 0.2931, 0.6126],
[0.2618, 0.3506, 0.5095, 0.7351]],
[[0.8555, 0.6320, 0.9461, 0.0928],
[0.2094, 0.3944, 0.0528, 0.7900]],
[[0.0000, 0.0000, 0.0000, 0.0000],
[0.0000, 0.0000, 0.0000, 0.0000]]])
tensor([[[0., 0.],
[0., 0.]],
[[0., 0.],
[0., 0.]],
[[0., 0.],
[0., 0.]],
[[0., 0.],
[0., 0.]]])
如果我选择“tensor1 = torch.rand(1,height,width)”我就没有这个问题。但如果大多数条目为零,我有。 使用 scale=(0.5, 1.0) 我也没有问题。
没有一些问题:
如何使用非零条目调整前三层的大小?
是我理解错了什么,还是真的很奇怪?
我创建了一个问题:
https://github.com/pytorch/pytorch/issues/22611
答案是 Torchvision 只支持 PIL-Images。
另一种方法是 albumentations-library 进行转换。