文章目錄
- 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
參考連結