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

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 )

  • 12
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
卷积层,池化和全连接是神经网络常用的三种次结构,它们各自有着不同的作用和功能。 卷积层是神经网络的核心组成部分之一,其主要作用是进行特征提取。它通过滑动窗口的方式,将输入数据与一组可学习的卷积核进行卷积运算,从而提取出输入数据的空间特征。卷积层在处理图像等具有二维结构的数据时具有优势,可以有效地保留空间信息和减少参数量。 池化卷积层之后,其主要作用是进行特征降维和特征选择,减少模型复杂度同时提高计算效率。常见的池化方式有最大池化和平均池化,它们通过对输入数据进行局部区域的汇聚操作,选择最大值或平均值等来减小数据的维度和大小。池化还能够帮助减轻模型对输入数据的小位置变化的敏感性,提高模型的鲁棒性。 全连接是神经网络的最后一,其主要作用是对前一输出进行分类或回归等任务。全连接将上一的所有神经元与本的神经元进行连接,通过学习权重参数来实现对输入数据的复杂非线性变换。全连接能够对提取的高级特征进行组合和整合,生成最终的输出结果。 综上所述,卷积层、池化和全连接在神经网络共同发挥重要作用。卷积层用于提取输入数据的空间特征,池化用于降低维度和提高计算效率,全连接用于对提取的特征进行综合和分类。这些次结构的组合和堆叠构成了深神经网络,能够对复杂的输入数据进行有效的分析和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值