深度學習中卷積層和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 )


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM