【问题标题】:What's different between convolution layer in `Torch`(i.e `nn.SpatialConvolution`) and convolution layer in `Pytorch`(i.e `torch.nn.Conv2d`)`Torch`中的卷积层(即`nn.SpatialConvolution`)和`Pytorch`中的卷积层(即`torch.nn.Conv2d`)有什么不同
【发布时间】:2020-03-26 09:27:47
【问题描述】:

我想知道Torch(即nn.SpatialConvolution)中的卷积层和Pytorch(即torch.nn.Conv2d)中的卷积层之间的区别

Torch的文档中,我找到了SpatialConvolution的输出形状

它说“如果输入图像是 3D 张量 nInputPlane x height x width,则输出图像大小将为 nOutputPlane x oheight x owidth 其中

owidth  = floor((width  + 2*padW - kW) / dW + 1)
oheight = floor((height + 2*padH - kH) / dH + 1)

"

这与 Pytorch Docs 中的 torch.nn.Conv2d 不同。

这是否意味着它们是不同的操作?

【问题讨论】:

    标签: machine-learning conv-neural-network pytorch torch


    【解决方案1】:

    是的,它们是不同的,因为torch 没有dilation 参数(有关膨胀解释,请参见here,基本上内核在每个内核元素的宽度和高度之间都有“空格”,这就是滑过图片)。

    除了dilation 之外,两个等式都是相同的(在pytorch 的版本中将dilation 设置为一个并且它是相等的)。

    如果您想在torch 中使用dilation,则有一个名为nn.SpatialDilatedConvolution 的单独类。

    【讨论】:

    • 所以strideTorch 中默认等于dilation?因为当width = Win, padW = padding[0], kW = kernel_size[0], dW = dilation[0]stride = @987654343 时我无法得到相同的答案Pytorch中的默认值)
    • @Chocoford 没有dW = stride[0]dilation = 1。在 Torch 中没有膨胀;也就是说,在 Torch 中,膨胀总是有效的 1。
    最近更新 更多