Как создать совместимый с Autograd модуль Pytorch, который изменяет размеры тензоров, например изображений? - PullRequest
0 голосов
/ 18 мая 2018

Мне было интересно, смогу ли я создать модуль изменения размера изображения в Pytorch, который принимает torch.tensor 3 * H * W в качестве ввода и возвращает тензор в качестве изображения с измененным размером.

Я знаю, что этоМожно преобразовать тензор в изображение PIL и использовать torchvision, но я также надеюсь вернуть градиенты от изображения с измененным размером к исходному изображению, и следующий пример вернет такую ​​ошибку (в PyTorch 0.4.0 в Windows 10):

import numpy as np
from torchvision import transforms

t2i = transforms.ToPILImage()
i2t = transforms.ToTensor()

trans = transforms.Compose(
    t2i, transforms.Resize(size=200), i2t]
)

test = np.random.normal(size=[3, 300, 300])
test = torch.tensor(test, requires_grad=True)
resized = trans(test)
resized.backward()

print(test.grad)

Traceback (most recent call last):
  File "D:/Projects/Python/PyTorch/test.py", line 41, in <module>
    main()
  File "D:/Projects/Python/PyTorch/test.py", line 33, in main
    resized = trans(test)
  File "D:\Anaconda3\envs\pytorch\lib\site-packages\torchvision\transforms\transforms.py", line 42, in __call__
    img = t(img)
  File "D:\Anaconda3\envs\pytorch\lib\site-packages\torchvision\transforms\transforms.py", line 103, in __call__
    return F.to_pil_image(pic, self.mode)
  File "D:\Anaconda3\envs\pytorch\lib\site-packages\torchvision\transforms\functional.py", line 102, in to_pil_image
    npimg = np.transpose(pic.numpy(), (1, 2, 0))
RuntimeError: Can't call numpy() on Variable that requires grad. Use var.detach().numpy() instead.

Кажется, что я не могу "увеличить размер" тензора, не отсоединив его сначала от автограда, но отключив его, я не могу вычислить градиенты.

Есть ли способ создать функцию / модуль горелки, котораято же самое, что и torchvision.transforms.Resize, совместимый с autograd?Любая помощь очень ценится!

1 Ответ

0 голосов
/ 26 мая 2018

torch.nn.functional.upsample работает на меня, упа!

...