常用的兩個庫分別爲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
參考鏈接