torch.cat和torchvision。的组合将利兹变换为零张量

时间:2019-07-08 18:16:28

标签: pytorch torch tensor torchvision

我想在张量的第四层中向图像添加更多信息,其中前三层基于图像。然后,我想从图像中消除阴影(数据增强),并且必须将图像调整为给定大小。

为此,我从图片中创建了一个张量,并使用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)时,我也没有问题。

没有问题:

  1. 如何才能使前三层的大小重新调整为非零值?

  2. 我误会了,还是真的很奇怪?

1 个答案:

答案 0 :(得分:0)

我创建了一个问题:

https://github.com/pytorch/pytorch/issues/22611

答案是Torchvision仅支持PIL图像。

一个替代方法是用于转换的专辑库。