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-массивы и, кажется, делает то, что я пытаюсь сделать выше, но без поддержки пакетов и каналов.