oneflow.nn.ReflectionPad2d

class oneflow.nn.ReflectionPad2d(padding)

This operator pads the input tensor using the reflection of the input boundary.

The interface is consistent with PyTorch. The documentation is referenced from: https://pytorch.org/docs/1.10/generated/torch.nn.ReflectionPad2d.html.

Parameters

padding (Union[int,tuple]) – The size or bundary of padding, if is int uses the same padding in all dimension; if 4-dims tuple, uses \((\text{padding}_{\text{left}}, \text{padding}_{\text{right}}, \text{padding}_{\text{top}}, \text{padding}_{\text{bottom}} )\)

Returns

Returns a new tensor which is result of the reflection padding of the input tensor.

Return type

Tensor

Shape:
  • Input: \((N, C, H_{\text{in}}, W_{\text{in}})\) or \((C, H_{in}, W_{in})\)

  • Output: \((N, C, H_{\text{out}}, W_{\text{out}})\) or \((C, H_{out}, W_{out})\) where

    \(H_{\text{out}} = H_{\text{in}} + \text{padding}_{\text{top}} + \text{padding}_{\text{bottom}}\)

    \(W_{\text{out}} = W_{\text{in}} + \text{padding}_{\text{left}} + \text{padding}_{\text{right}}\)

For example:

>>> import oneflow as flow
>>> import numpy as np
>>> input = flow.tensor(np.arange(18).reshape((1, 2, 3, 3)).astype(np.float32))
>>> m = flow.nn.ReflectionPad2d((2, 2, 1, 1))
>>> out = m(input)
>>> out
tensor([[[[ 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.]],

         [[14., 13., 12., 13., 14., 13., 12.],
          [11., 10.,  9., 10., 11., 10.,  9.],
          [14., 13., 12., 13., 14., 13., 12.],
          [17., 16., 15., 16., 17., 16., 15.],
          [14., 13., 12., 13., 14., 13., 12.]]]], dtype=oneflow.float32)