• 深度学习中卷积层和pooling层的输出计算公式(转)


    原文链接:https://blog.csdn.net/yepeng_xinxian/article/details/82380707

    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 )

  • 相关阅读:
    新生题目集
    C语言课程设计
    Java学习-8
    Java学习-7
    Java学习-6
    Java学习-5
    HTML学习
    Java学习-4
    强大的项目管理工具maven
    java学习-3
  • 原文地址:https://www.cnblogs.com/wangyarui/p/11088887.html
Copyright © 2020-2023  润新知