Я пытаюсь создать собственный слой свертки в 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. Если я запускаю это в нейронной сети, это будет слишком медленно. Чтобы увеличить скорость, мне нужно выяснить, как это сделать без петель. Так как я могу это сделать?