深度学习中卷积层和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 )