Как работает «Сложить» и «Развернуть» Пайторха? - PullRequest
0 голосов
/ 29 декабря 2018

Я прошел официальный документ .Мне трудно понять, для чего используется эта функция и как она работает.Может кто-нибудь объяснить это с точки зрения непрофессионала?

Я получаю сообщение об ошибке за пример, который они предоставляют, хотя используемая версия Pytorch соответствует документации.Возможно, исправление ошибки, которую я сделал, должно чему-то меня научить?Фрагмент, приведенный в документации:

   fold = nn.Fold(output_size=(4, 5), kernel_size=(2, 2))
   input = torch.randn(1, 3 * 2 * 2, 1)
   output = fold(input)
   output.size()

и фиксированный фрагмент:

   fold = nn.Fold(output_size=(4, 5), kernel_size=(2, 2))
   input = torch.randn(1, 3 * 2 * 2, 3 * 2 * 2)
   output = fold(input)
   output.size()

Спасибо!

1 Ответ

0 голосов
/ 29 декабря 2018

unfold и fold используются для облегчения операции «скользящего окна» (например, свертки).
Предположим, вы хотите применить функцию foo кКаждое окно 5x5 на карте / изображении объектов:

from torch.nn import functional as f
windows = f.unfold(x, kernel_size=5)

Теперь windows имеет size пакета - (5 * 5 *x.size(1)) - num_windows, вы можете применить foo к windows:

processed = foo(windows)

Теперь вам нужно «сложить» processed к исходному размеру x:

out = f.fold(processed, x.shape[-2:], kernel_size=5)

Вам необходимо позаботиться о paddingи kernel_size, которые могут повлиять на вашу способность "сложить" обратно processed до размера x.
Более того, fold суммирует по перекрывающимся элементам, так что вы можете захотетьразделите вывод fold на размер патча.

...