Есть ли в PyTorch функция для преобразования сверток в полностью подключенные сети? - PullRequest
3 голосов
/ 21 июня 2019

Я пытаюсь преобразовать слой свертки в полностью связанный слой.

Например, есть пример ввода 3 × 3 и ядра 2x2:

input and kernel

, что эквивалентно умножению матрицы на вектор ,

vector-matrix multiplication

Есть ли в PyTorch функция для получения матрицы B?

1 Ответ

0 голосов
/ 21 июня 2019
import torch


dim1 = 5
dim2 = dim1
x = torch.randn(dim1, dim2).reshape(1, -1)
kernel = torch.arange(0, 9).reshape(3, 3)
flat_k = torch.zeros(dim1 * dim2)

for i in range(len(kernel)):
    flat_k[i * dim1:i * dim1 + kernel.shape[0]] = kernel[i]

сейчас flat_k - это первый столбец матрицы Теплица, поэтому вы можете использовать scipy.linalg.toeplitz:

from scipy.linalg import toeplitz

k = toeplitz(flat_k.numpy())

или, если вы хотите иметь возможность обратного пропуска через него, вы можете посмотреть исходный код функции toeplitz в scipy и реализовать эквивалент в Pytorch.

...