我正在研究pytorch onnx模型的推理模型,这就是为什么要问这个问题的原因。
假设我有一个尺寸32 x 32 x 3
标注的图像(CIFAR-10数据集)。我通过尺寸为:的Conv2d 3 x 192 x 5 x 5
。我使用的命令是:Conv2d(3, 192, kernel_size=5, stride=1, padding=2)
使用公式(此处表示为参考pg12 https://arxiv.org/pdf/1603.07285.pdf),我应该得到带有尺寸28 x 28 x 192
(input - kernel + 1 = 32 - 5 + 1
)的输出图像。
问题是PyTorch如何实现此4d张量3 x 192 x 5 x 5
以获取的输出28 x 28 x 192
?该层是4d张量,输入图像是2d张量。
核(5x5
)如何在图像矩阵中扩散32 x 32 x 3
?内核与first->3 x 192
或or卷积什么32 x 32
?
注意:我已经了解了事物的二维方面。我在3个或更多的地方问以上问题。
Conv2d的输入为shape的张量,(N, C_in, H_in, W_in)
输出为shape (N, C_out, H_out, W_out)
,其中N
批处理大小(图像数),C
通道数,H
高度和W
宽度是。输出的高度和宽度H_out
,W_out
计算如下(忽略扩张):
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
有关如何获得此公式的说明,请参见cs231n。
在你的例子中N=1, H_in = 32, W_in = 32, C_in = 3, kernel_size = (5, 5), strides = (1, 1), padding = (0, 0)
,给予H_out = 28, W_out = 28
。
的C_out=192
手段,有192个不同的滤波器,每个形状的(C_in, kernel_size[0], kernel_size[1]) = (3, 5, 5)
。每个滤波器独立地与输入图像进行卷积,从而得到2D形状的张量(H_out, W_out) = (28, 28)
,并且由于存在C_out = 192
滤波器和N = 1
图像,因此最终输出为shape (N, C_out, H_out, W_out) = (1, 192, 28, 28)
。
要了解如何精确执行卷积,请参阅卷积演示。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句