天天看點

Pytorch——torch.nn&torch.nn.functionaltorch.nntorch.nn.functional實作pooling

文章目錄

  • torch.nn
  • torch.nn.functional
  • 實作pooling
    • 實作二維max pooling
    • 實作一維max pooling

常用的兩個庫分别為torch.nn和torch.nn.functional,裡面有很多函數功能都是相似的,兩者的差別主要在于:使用torch.nn定義函數的時候,搭建的是“空殼子”,并不需要給定input,input在forward部分才給定,而使用torch.nn.functional定義函數的時候,需要将input也一起給定(見下面的例子),是以torch.nn常常在類的__init__函數中用來定義網絡架構,而torch.nn.functional常常在forward函數中用。

torch.nn

github連結

導入方法:

import torch.nn as nn

常用函數:

nn.Sequential(), nn.Conv2d(), nn.Linear(), nn.ReLU(), nn.BatchNorm2d(),nn.MaxPool2d(),nn.MaxPool1d()

等。

torch.nn.functional

github連結

這個庫的導入方法一般為:

import torch.nn.functional as F

常用函數有:

F.max_pool2d(), F.avg_pool2d(), F.max_pool1d(), F.avg_pool1d(), F.relu()

等。

實作pooling

實作二維max pooling

輸入為

(N, C, H_{in}, W_{in})

, 輸出為

(N, C, H_{out}, W_{out})

類型tensor。

【方法一】

torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)

參數解釋:

  • kernel_size(int or tuple) - max pooling的視窗大小,可以為tuple,在nlp中tuple用更多,(n,1)
  • 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,計算輸出信号大小的時候,會使用向上取整,代替預設的向下取整的操作。
a = torch.randn(3,5,10)
b = nn.MaxPool2d((5, 1))
c = b(a)
print(c.shape) # torch.Size([3, 1, 10])
           

【方法二】

F.max_pool2d(input, kernel)

這裡的kernel與上面相同,也是tuple。

a = torch.randn(3,5,10)
c = F.max_pool2d(a, (5, 1)) 
print(c.shape) # torch.Size([3, 1, 10])
           

【方法三】

nn.AdaptiveMaxPool2d(output_size)

自适應最大池化Adaptive Max Pooling

參考連結

實作一維max pooling

輸入為

(N, C, L_{in})

,輸出為

(N, C, L_{out})

類型tensor。

【方法一】

torch.nn.MaxPool1d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)

【方法二】

F.max_pool1d(input, kernel)

這裡的kernel與上面相同,在一維pooling的時候,kernel size為int型。

【方法三】

nn.AdaptiveMaxPool1d(output_size)

自适應最大池化Adaptive Max Pooling

參考連結

繼續閱讀