Как выполнить самосвертку (свертку с собой) в PyTorch - PullRequest
1 голос
/ 16 января 2020

PyTorch предлагает функциональную операцию свертки 2D torch.nn.functional.conv2d, которая может принимать входные данные и весовой параметр (https://pytorch.org/docs/stable/nn.html#conv2d).

Я хочу выполнить самосвертку, что означает, что учитывая тензор X. Я хочу вычислить:

conv2d(X, X)

Однако ожидается, что форма фильтра будет иметь вид [out_ch, in_channel/groups, kernel_size, kernel_size].

Скажем, X имеет form [32, 3, 16, 16,] Я пытался переставить X, чтобы попытаться соответствовать ожидаемой форме параметра веса, например:

W = X.permute(1, 0, 2, 3) # 3, 32, 16, 16 
conv2d(X, W)

Но это не работает с 32 != in_channel/groups == 3 / 1 == 3

полная операция будет выглядеть примерно так (чтобы увидеть требования к размерам):

X + conv2d(X, X)

Возможно ли это сделать с помощью PyTorch?

Другие пакеты, такие как SciPy, предлагают операцию convolve2d (https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.convolve2d.html), но он поддерживает только 2D-массивы и, кажется, делает то, что я пытаюсь сделать выше, но без поддержки пакетов и каналов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...