我正在尝试在python中创建一个自定义卷积层,它将使用3x3内核。我要尝试的是采用3x3内核,并将其沿32x32图像移动,在此我将像素值与内核之间的点积取值。
我所做的是创建两个嵌套的for循环,在其中我不断从图像中切出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)
。内核是3x3张量。
问题是使用嵌套的for循环。如果我在神经网络中运行它,它将太慢。为了提高速度,我需要弄清楚如何在没有for循环的情况下执行此操作。那我该怎么办呢?