Как реализовать сверточный слой в Python? - PullRequest
1 голос
/ 08 марта 2019

Я пытаюсь создать собственный слой свертки в python, который будет использовать ядро ​​3x3. То, что я пытаюсь сделать, это взять это ядро ​​3x3 и переместить его по изображению 32x32, где я беру точечное произведение между значениями пикселей и ядром.

Я создал два вложенных цикла, в которых я вырезал область размером 3x3 из изображения, а затем использовал torch.matmul и torch.sum для фильтрации значений пикселей с шагом = 1.

for i in range((x.shape[0]-3) + 1):
    for j in range((x.shape[1]-3) + 1):             
        x_out[i][j] = torch.sum(torch.matmul(kernel, x[i:i+3, j:j+3]))

Форма x равна torch.size(32, 32), а форма x_out будет torch.size(30,30). Ядро - тензор 3х3.

Проблема заключается в использовании вложенных циклов for. Если я запускаю это в нейронной сети, это будет слишком медленно. Чтобы увеличить скорость, мне нужно выяснить, как это сделать без петель. Так как я могу это сделать?

...