torch.nn.ReflectionPad2d(padding)
这个函数简单来说就是:利用输入边界的反射来填充输入张量。
官方文档里给了该padding的输入输出如下所示:
CLASS torch.nn.ReflectionPad2d(padding: Union[T, Tuple[T, T, T, T]])
Input: ( N , C , H i n , W i n ) (N, C, H_{in}, W_{in}) (N,C,Hin,Win)
Output: ( N , C , H o u t , W o u t ) (N, C, H_{out}, W_{out}) (N,C,Hout,Wout)where
KaTeX parse error: Expected '}', got '_' at position 33: …+ \text{padding_̲top} + \text{pa…
KaTeX parse error: Expected '}', got '_' at position 33: …+ \text{padding_̲left} + \text{p…
官方文档比较简单,我们先直接看代码:
import torch
import torch.nn as nn
m = nn.ReflectionPad2d(1)
input = torch.arange(9, dtype=torch.float).reshape(1, 1, 3, 3)
input
-------
tensor([[[[0., 1., 2.],
[3., 4., 5.],
[6., 7., 8.]]]])
----------------------------
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.]]]])
------------------------------
n = nn.ReflectionPad2d(2)
n(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, 1, 2, 0))
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.]]]])
1. 填充一个整数
从上面的例子看,填充的值就是对应边界旁边的值按填充参数反射过去,即反射填充。
填充顺序是左-右-上-下,
在nn.ReflectionPad2d((1, 1, 2, 0))
中,这几个数字表示左右上下分别要填充的层数。我们画图表示更清楚,如下:
几幅图已经比较清楚的表达了该padding方法的过程。
Note: padding的大小要小于输入的大小
Reference:
几幅图已经比较清楚的表达了该padding方法的过程。
Note: padding的大小要小于输入的大小