原文鏈接: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 )