1. 程式人生 > 程式設計 >pytorch中的卷積和池化計算方式詳解

pytorch中的卷積和池化計算方式詳解

TensorFlow裡面的padding只有兩個選項也就是valid和same

pytorch裡面的padding麼有這兩個選項,它是數字0,1,2,3等等,預設是0

所以輸出的h和w的計算方式也是稍微有一點點不同的:tf中的輸出大小是和原來的大小成倍數關係,不能任意的輸出大小;而nn輸出大小可以通過padding進行改變

nn裡面的卷積操作或者是池化操作的H和W部分都是一樣的計算公式:H和W的計算

class torch.nn.MaxPool2d(kernel_size,stride=None,padding=0,dilation=1,return_indices=False,ceil_mode=False):
"""
Parameters: 
  kernel_size – the size of the window to take a max over
  stride – the stride of the window. 預設值是kernel_size
  padding – implicit zero padding to be added on both side,預設值是0
  dilation – a parameter that controls the stride of elements in the window,預設值是1
  return_indices – if True,will return the max indices along with the outputs. Useful when Unpooling later
  ceil_mode – when True,will use ceil instead of floor to compute the output shape,向上取整和向下取整,預設是向下取整
"""

不一樣的地方在於:第一點,步長stride預設值,上面預設和設定的kernel_size一樣,下面預設是1;第二點,輸出通道的不一樣,上面的輸出通道和輸入通道是一樣的也就是沒有改變特徵圖的數目,下面改變特徵圖的數目為out_channels

class torch.nn.Conv2d(in_channels,out_channels,kernel_size,stride=1,groups=1,bias=True):
    pass
"""
Parameters: 
  in_channels (int) – Number of channels in the input image
  out_channels (int) – Number of channels produced by the convolution
  kernel_size (int or tuple) – Size of the convolving kernel
  stride (int or tuple,optional) – Stride of the convolution. Default: 1,預設是1
  padding (int or tuple,optional) – Zero-padding added to both sides of the input. Default: 0
  dilation (int or tuple,optional) – Spacing between kernel elements. Default: 1
  groups (int,optional) – Number of blocked connections from input channels to output channels. Default: 1
  bias (bool,optional) – If True,adds a learnable bias to the output. Default: True
"""

第三點不一樣是卷積有一個引數groups,將特徵圖分開給不同的卷積進行操作然後再整合到一起,xception就是利用這一個。

"""
At groups=1,all inputs are convolved to all outputs.
At groups=2,the operation becomes equivalent to having two conv layers side by side,each seeing half the input channels,and producing half the output channels,and both subsequently concatenated.
At groups= in_channels,each input channel is convolved with its own set of filters (of size ⌊out_channelsin_channels⌋
).
"""

pytorch AvgPool2d函式

class torch.nn.AvgPool2d(kernel_size,ceil_mode=False,count_include_pad=True):
  pass
"""
kernel_size: the size of the window
stride: the stride of the window. Default value is :attr:`kernel_size`
padding: implicit zero padding to be added on both sides
ceil_mode: when True,will use `ceil` instead of `floor` to compute the output shape
count_include_pad: when True,will include the zero-padding in the averaging calculation
"""

shape的計算公式,在(h,w)位置處的輸出值的計算。

pytorch中的F.avg_pool1d()平均池化操作作用於一維,input 的維度是三維比如[2,2,7]。F.avg_pool1d()中核size是3,步長是2表示每三個數取平均,每隔兩個數取一次.比如[1,3,4,5,6,7]安照3個數取均值,兩步取一次,那麼結果就是[ 2.3333,6 ],也就是核是一維的,也只作用於一個維度。按照池化操作計算公式input size為[2,7],kernel size為3,步長為2,則輸出維度計算(7-3)/2+1=3所以輸出維度是[2,3],這與輸出結果是一致的。

pytorch中的F.avg_pool2d(),input 是維度是4維如[2,2,4,4],表示這裡批量數是2也就是兩張影象,這裡通道數量是2,影象是size 是4*4的.核size是(2,2),步長是(2,2)表示被核覆蓋的數取平均,橫向縱向的步長都是2.那麼核是二維的,所以取均值時也是覆蓋二維取的。輸出中第一個1.5的計算是:(1+2+1+2)/4=1.5.表示第一張影象左上角的四個畫素點的均值。按照池化操作計算公式input size為[2,4],kernel size為2*2,步長為2,則輸出維度計算(4-2)/2+1=2所以輸出維度是[2,2],這與輸出結果是一致的。

Conv3d函式

class torch.nn.Conv3d(in_channels,bias=True):
  pass
"""
in_channels (int): Number of channels in the input image
out_channels (int): Number of channels produced by the convolution
kernel_size (int or tuple): Size of the convolving kernel
stride (int or tuple,optional): Stride of the convolution. Default: 1
padding (int or tuple,optional): Zero-padding added to all three sides of the input. Default: 0
dilation (int or tuple,optional): Spacing between kernel elements. Default: 1
groups (int,optional): Number of blocked connections from input channels to output channels. Default: 1
bias (bool,optional): If ``True``,adds a learnable bias to the output. Default: ``True``
Shape:
    - Input: :math:`(N,C_{in},D_{in},H_{in},W_{in})`
    - Output: :math:`(N,C_{out},D_{out},H_{out},W_{out})`
"""
  C_out = out_channels

以上這篇pytorch中的卷積和池化計算方式詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。