pytorch常用的padding函數


 

1)ReflectionPad2d

CLASS torch.nn.ReflectionPad2d(padding)

使用輸入邊界的反射來填充輸入tensor

對於N維的填充,使用torch.nn.functional.pad()

參數:

  • padding(int, tuple):指定填充的大小。如果是一個整數值a,則所有邊界都使用相同的填充數,等價於輸入(a,a,a,a)。如果是大小為4的元組,則表示 (padding_leftpadding_left, padding_rightpadding_right, padding_toppadding_top, padding_bottompadding_bottom)

形狀:

  • 輸入:(N,C,Hin,Win)
  • 輸出:(N,C,Hout,Wout)

計算式子為:

  • Hout=Hin+padding_top+padding_bottom
  • Wout=Win+padding_left+padding_right

舉例:

(deeplearning) userdeMacBook-Pro:pytorch-CycleGAN-and-pix2pix user$ python
Python 3.6.8 |Anaconda, Inc.| (default, Dec 29 2018, 19:04:46) 
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from torch import nn
>>> import torch
>>> m = nn.ReflectionPad2d(2)
>>> input = torch.arange(9, dtype=torch.float).reshape(1,1,3,3)
>>> m(input)
tensor([[[[8., 7., 6., 7., 8., 7., 6.],
          [5., 4., 3., 4., 5., 4., 3.],
          [2., 1., 0., 1., 2., 1., 0.],
          [5., 4., 3., 4., 5., 4., 3.],
          [8., 7., 6., 7., 8., 7., 6.],
          [5., 4., 3., 4., 5., 4., 3.],
          [2., 1., 0., 1., 2., 1., 0.]]]])
          
>>> m = nn.ReflectionPad2d(1)
>>> m(input)
tensor([[[[4., 3., 4., 5., 4.],
          [1., 0., 1., 2., 1.],
          [4., 3., 4., 5., 4.],
          [7., 6., 7., 8., 7.],
          [4., 3., 4., 5., 4.]]]])

從例子可見,填充的值就是對應邊界旁邊的值,即反射填充

 

⚠️padding的大小要小於輸入的大小,否則報錯:

>>> m = nn.ReflectionPad2d(3)
>>> m(input)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/anaconda3/envs/deeplearning/lib/python3.6/site-packages/torch/nn/modules/module.py", line 489, in __call__
    result = self.forward(*input, **kwargs)
  File "/anaconda3/envs/deeplearning/lib/python3.6/site-packages/torch/nn/modules/padding.py", line 172, in forward
    return F.pad(input, self.padding, 'reflect')
  File "/anaconda3/envs/deeplearning/lib/python3.6/site-packages/torch/nn/functional.py", line 2685, in pad
    ret = torch._C._nn.reflection_pad2d(input, pad)
RuntimeError: Argument #4: Padding size should be less than the corresponding input dimension, but got: padding (3, 3) at dimension 3 of input [1, 1, 3, 3]
>>> 

 

2)ReplicationPad2d

CLASS torch.nn.ReplicationPad2d(padding)

使用輸入邊界的復制值來填充輸入tensor

對於N維的填充,使用torch.nn.functional.pad()

 

參數:

  • padding(int, tuple):指定填充的大小。如果是一個整數值a,則所有邊界都使用相同的填充數,等價於輸入(a,a,a,a)。如果是大小為4的元組,則表示 (padding_leftpadding_left, padding_rightpadding_right, padding_toppadding_top, padding_bottompadding_bottom)

形狀:

  • 輸入:(N,C,Hin,Win)
  • 輸出:(N,C,Hout,Wout)

計算式子為:

  • Hout=Hin+padding_top+padding_bottom
  • Wout=Win+padding_left+padding_right

舉例:

>>> m = nn.ReplicationPad2d(2)
>>> m(input)
tensor([[[[0., 0., 0., 1., 2., 2., 2.],
          [0., 0., 0., 1., 2., 2., 2.],
          [0., 0., 0., 1., 2., 2., 2.],
          [3., 3., 3., 4., 5., 5., 5.],
          [6., 6., 6., 7., 8., 8., 8.],
          [6., 6., 6., 7., 8., 8., 8.],
          [6., 6., 6., 7., 8., 8., 8.]]]])
>>> 

可見填充的邊界是啥,填充的值就是啥

 

3)ZeroPad2d

CLASS torch.nn.ZeroPad2d(padding)

使用0填充輸入tensor的邊界

對於N維的填充,使用torch.nn.functional.pad()

參數:

  • padding(int, tuple):指定填充的大小。如果是一個整數值a,則所有邊界都使用相同的填充數,等價於輸入(a,a,a,a)。如果是大小為4的元組,則表示 (padding_leftpadding_left, padding_rightpadding_right, padding_toppadding_top, padding_bottompadding_bottom)

形狀:

  • 輸入:(N,C,Hin,Win)
  • 輸出:(N,C,Hout,Wout)

計算式子為:

  • Hout=Hin+padding_top+padding_bottom
  • Wout=Win+padding_left+padding_right

舉例:

>>> m = nn.ZeroPad2d(2)
>>> m(input)
tensor([[[[0., 0., 0., 0., 0., 0., 0.],
          [0., 0., 0., 0., 0., 0., 0.],
          [0., 0., 0., 1., 2., 0., 0.],
          [0., 0., 3., 4., 5., 0., 0.],
          [0., 0., 6., 7., 8., 0., 0.],
          [0., 0., 0., 0., 0., 0., 0.],
          [0., 0., 0., 0., 0., 0., 0.]]]])
>>> 

 

ConstantPad2d

CLASS torch.nn.ConstantPad2d(padding, value)

使用一個常量值填充輸入tensor邊界

對於N維的填充,使用torch.nn.functional.pad()

參數:

  • padding(int, tuple):指定填充的大小。如果是一個整數值a,則所有邊界都使用相同的填充數,等價於輸入(a,a,a,a)。如果是大小為4的元組,則表示 (padding_leftpadding_left, padding_rightpadding_right, padding_toppadding_top, padding_bottompadding_bottom)
  • value:填充的常量值

形狀:

  • 輸入:(N,C,Hin,Win)
  • 輸出:(N,C,Hout,Wout)

計算式子為:

  • Hout=Hin+padding_top+padding_bottom
  • Wout=Win+padding_left+padding_right

舉例:

>>> m = nn.ConstantPad2d(2,3.99)
>>> m(input)
tensor([[[[3.9900, 3.9900, 3.9900, 3.9900, 3.9900, 3.9900, 3.9900],
          [3.9900, 3.9900, 3.9900, 3.9900, 3.9900, 3.9900, 3.9900],
          [3.9900, 3.9900, 0.0000, 1.0000, 2.0000, 3.9900, 3.9900],
          [3.9900, 3.9900, 3.0000, 4.0000, 5.0000, 3.9900, 3.9900],
          [3.9900, 3.9900, 6.0000, 7.0000, 8.0000, 3.9900, 3.9900],
          [3.9900, 3.9900, 3.9900, 3.9900, 3.9900, 3.9900, 3.9900],
          [3.9900, 3.9900, 3.9900, 3.9900, 3.9900, 3.9900, 3.9900]]]])
>>> 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM