1.卷积层的输出计算公式

class torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)

参数:

  • in_channels(int) – 输入信号的通道
  • out_channels(int) – 卷积产生的通道
  • kerner_size(int or tuple) - 卷积核的尺寸
  • stride(int or tuple, optional) - 卷积步长
  • padding (int or tuple, optional)- 输入的每一条边补充0的层数
  • dilation(int or tuple, `optional``) – 卷积核元素之间的间距
  • groups(int, optional) – 从输入通道到输出通道的阻塞连接数
  • bias(bool, optional) - 如果bias=True,添加偏置

形状:
输入: (N,C_in,H_in,W_in)
输出: (N,C_out,H_out,W_out)

我们可以得到:
H_out = floor( (H_in+2padding[0]-dilation[0](kernerl_size[0]-1)-1)/stride[0]+1 )

W_out=floor( (W_in+2padding[1]-dilation[1](kernerl_size[1]-1)-1)/stride[1]+1 )

一般情况下,由于dilation默认为1,上式可以简化为:

H_out=floor( (H_in+2padding[0]-kernerl_size[0])/stride[0]+1 )

W_out=floor( (W_in+2padding[1]-kernerl_size[1])/stride[1]+1 )

 

2.反卷积层(ConvTranspose2D)的输出计算公式

class torch.nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, groups=1, bias=True)

参数:

  • in_channels(int) – 输入信号的通道数
  • out_channels(int) – 卷积产生的通道数
  • kerner_size(int or tuple) - 卷积核的大小
  • stride(int or tuple,optional) - 卷积步长
  • padding(int or tuple, optional) - 输入的每一条边补充0的层数
  • output_padding(int or tuple, optional) - 输出的每一条边补充0的层数
  • dilation(int or tuple, optional) – 卷积核元素之间的间距
  • groups(int, optional) – 从输入通道到输出通道的阻塞连接数
  • bias(bool, optional) - 如果bias=True,添加偏置

形状:
输入: (N,C_in,H_in,W_in)
输出: (N,C_out,H_out,W_out)

我们可以得到:
H_out=(H_in-1)stride[0]-2padding[0]+kernel_size[0]+output_padding[0]

W_out=(W_in-1)stride[1]-2padding[1]+kernel_size[1]+output_padding[1]

由于output_padding默认为0,上式可以简化为:

H_out=(H_in-1)stride[0]-2padding[0]+kernel_size[0]

W_out=(W_in-1)stride[1]-2padding[1]+kernel_size[1]

Tips:相当于Conv2d中计算公式的反函数

 

3.pooling层的输出计算公式

class torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)

参数:

  • kernel_size(int or tuple) - max pooling的窗口大小
  • stride(int or tuple, optional) - max pooling的窗口移动的步长。默认值是kernel_size
  • padding(int or tuple, optional) - 输入的每一条边补充0的层数
  • dilation(int or tuple, optional) – 一个控制窗口中元素步幅的参数
  • return_indices - 如果等于True,会返回输出最大值的序号,对于上采样操作会有帮助
  • ceil_mode - 如果等于True,计算输出信号大小的时候,会使用向上取整,代替默认的向下取整的操作

形状:
输入: (N,C,H_in,W_in)
输出: (N,C,H_out,W_out)

我们可以得到:
H_out = floor( (H_in+2padding[0]-dilation[0](kernerl_size[0]-1)-1)/stride[0]+1 )

W_out=floor( (W_in+2padding[1]-dilation[1](kernerl_size[1]-1)-1)/stride[1]+1 )

一般情况下,由于dilation默认为1,上式可以简化为:

H_out=floor( (H_in+2padding[0]-kernerl_size[0])/stride[0]+1 )

W_out=floor( (W_in+2padding[1]-kernerl_size[1])/stride[1]+1 )

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐