Pytorch——torch.nn&torch.nn.functional


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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章