Pytorch 在Pytork中如何实现Conv2d的算法
我正在研究pytorch-onnx模型的推理模型,这就是为什么要问这个问题 假设我有一个尺寸为32 x 32 x 3的图像(CIFAR-10数据集)。我将它通过一个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
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