Pytorch 在Pytork中如何实现Conv2d的算法

Pytorch 在Pytork中如何实现Conv2d的算法,pytorch,conv-neural-network,Pytorch,Conv Neural Network,我正在研究pytorch-onnx模型的推理模型,这就是为什么要问这个问题 假设我有一个尺寸为32 x 32 x 3的图像(CIFAR-10数据集)。我将它通过一个Conv2d,其尺寸为:3x192x5x5。我使用的命令是:Conv2d(3192,内核大小=5,跨步=1,填充=2) 使用公式(此处所述供参考pg12),我应该得到尺寸为28 x 28 x 192(input-kernel+1=32-5+1)的输出图像 问题是PyTorch是如何实现这个4d张量3x192x5x5来获得28x2819

我正在研究pytorch-onnx模型的推理模型,这就是为什么要问这个问题

假设我有一个尺寸为32 x 32 x 3的图像(CIFAR-10数据集)。我将它通过一个Conv2d,其尺寸为:
3x192x5x5
。我使用的命令是:
Conv2d(3192,内核大小=5,跨步=1,填充=2)

使用公式(此处所述供参考pg12),我应该得到尺寸为
28 x 28 x 192
input-kernel+1=32-5+1
)的输出图像

问题是PyTorch是如何实现这个4d张量
3x192x5x5
来获得
28x28192
的输出的?该层为4d张量,输入图像为2d张量

内核(
5x5
)如何在图像矩阵中分布?内核与first->
3x192
32x32
的卷积是什么

注意:我已经了解事物的2d方面。我问了3个或更多的问题。

输入是形状的张量
(N,C\u-in,H\u-in,W\u-in)
,输出是形状
(N,C\u-out,H\u-out,W\u-out)
,其中
N
是批量大小(图像数量),
C
是通道数量,
H
是高度,
W
是宽度。输出高度和宽度
H_out
W_out
计算如下(忽略膨胀):

有关如何获得此公式的说明,请参见

在您的示例中,
N=1,H_In=32,W_In=32,C_In=3,内核大小=(5,5),跨步=(1,1),填充=(0,0)
,给出
H_out=28,W_out=28

C_out=192
意味着有192个不同的过滤器,每个过滤器的形状
(C_in,内核大小[0],内核大小[1])=(3,5,5)
。每个滤波器独立地与输入图像执行卷积,产生形状为
(H,u out,W,u out)=(28,28)
,并且由于存在
C\u out=192
滤波器和
N=1
图像,最终输出为形状
(N,C\u out,H,u out,W\u out)=(1,192,28,28)

要了解卷积是如何执行的,请参阅


最后一段是我想要的答案。万分感谢!
H_out = (H_in + 2*padding[0] - kernel_size[0]) / stride[0] + 1
W_out = (W_in + 2*padding[1] - kernel_size[1]) / stride[1] + 1