pad

paddle.nn.functional. pad ( x, pad, mode='constant', value=0.0, data_format='NCHW', name=None ) [source]

Pad tensor according to 'pad' and 'mode'. If mode is 'constant' and length of pad is twice as length of x dimension, then the padding will be started from the first dimension and moved back onto x according to 'pad' and 'value'. If mode is 'reflect', pad[0] and pad[1] must be no greater than width-1. The height and depth dimension has the same condition.

Parameters
  • x (Tensor) – The input tensor with data type float32/double/int32/int64_t/complex64/complex128.

  • pad (Tensor|list[int]|tuple[int]) – The padding size with data type int. If mode is 'constant' and length of pad is twice as length of x dimension, then x will be padded from the first dimension to the last dimension. Else: 1. If input dimension is 3, then the pad has the form (pad_left, pad_right). 2. If the input dimension is 4, then the pad has the form (pad_left, pad_right, pad_top, pad_bottom). 3. If the input dimension is 5, then the pad has the form (pad_left, pad_right, pad_top, pad_bottom, pad_front, pad_back).

  • mode (str, optional) –

    Four modes: 'constant' (default), 'reflect', 'replicate', 'circular'. Default is 'constant'.

    • ’constant’ mode, uses a constant value to pad the input tensor.

    • ’reflect’ mode, uses reflection of the input boundaries to pad the input tensor.

    • ’replicate’ mode, uses input boundaries to pad the input tensor.

    • ’circular’ mode, uses circular input to pad the input tensor.

  • value (float, optional) – The value to fill the padded areas in ‘constant’ mode . Default is \(0.0\).

  • data_format (str, optional) – An string from: 'NCL', 'NLC', 'NHWC', 'NCHW', 'NCDHW', 'NDHWC'. Specify the data format of the input data. Default: 'NCHW'.

  • name (str, optional) – For details, please refer to Name. Generally, no setting is required. Default: 'None'.

Returns

Tensor, a Tensor padded according to pad and mode and data type is same as input.

Example

x = [[[[[1., 2., 3.],
        [4., 5., 6.]]]]]

Case 0:
    pad = [0, 0, 0, 0, 0, 0, 1, 1, 0, 0],
    mode = 'constant'
    value = 0
    Out = [[[[[0., 0., 0.],
              [1., 2., 3.],
              [4., 5., 6.],
              [0., 0., 0.]]]]]

Case 1:
    pad = [2, 2, 1, 1, 0, 0],
    mode = 'constant'
    value = 0
    Out = [[[[[0. 0. 0. 0. 0. 0. 0.]
              [0. 0. 1. 2. 3. 0. 0.]
              [0. 0. 4. 5. 6. 0. 0.]
              [0. 0. 0. 0. 0. 0. 0.]]]]]

Case 2:
    pad = [2, 2, 1, 1, 0, 0],
    mode = 'reflect'
    Out = [[[[[6. 5. 4. 5. 6. 5. 4.]
              [3. 2. 1. 2. 3. 2. 1.]
              [6. 5. 4. 5. 6. 5. 4.]
              [3. 2. 1. 2. 3. 2. 1.]]]]]

Case 3:
    pad = [2, 2, 1, 1, 0, 0],
    mode = 'replicate'
    Out = [[[[[1. 1. 1. 2. 3. 3. 3.]
              [1. 1. 1. 2. 3. 3. 3.]
              [4. 4. 4. 5. 6. 6. 6.]
              [4. 4. 4. 5. 6. 6. 6.]]]]]

Case 4:
    pad = [2, 2, 1, 1, 0, 0],
    mode = 'circular'
    Out = [[[[[5. 6. 4. 5. 6. 4. 5.]
              [2. 3. 1. 2. 3. 1. 2.]
              [5. 6. 4. 5. 6. 4. 5.]
              [2. 3. 1. 2. 3. 1. 2.]]]]]

Examples

>>> import paddle
>>> import paddle.nn.functional as F

>>> # example 1
>>> x_shape = (1, 1, 3)
>>> x = paddle.arange(paddle.prod(paddle.to_tensor(x_shape)), dtype="float32").reshape(x_shape) + 1
>>> y = F.pad(x, [0, 0, 0, 0, 2, 3], value=1, mode='constant', data_format="NCL")
>>> print(y)
Tensor(shape=[1, 1, 8], dtype=float32, place=Place(cpu), stop_gradient=True,
[[[1., 1., 1., 2., 3., 1., 1., 1.]]])

>>> # example 2
>>> x_shape = (1, 1, 3)
>>> x = paddle.arange(paddle.prod(paddle.to_tensor(x_shape)), dtype="float32").reshape(x_shape) + 1
>>> y = F.pad(x, [2, 3], value=1, mode='constant', data_format="NCL")
>>> print(y)
Tensor(shape=[1, 1, 8], dtype=float32, place=Place(cpu), stop_gradient=True,
[[[1., 1., 1., 2., 3., 1., 1., 1.]]])

>>> # example 3
>>> x_shape = (1, 1, 2, 3)
>>> x = paddle.arange(paddle.prod(paddle.to_tensor(x_shape)), dtype="float32").reshape(x_shape) + 1
>>> y = F.pad(x, [1, 2, 1, 1], value=1, mode='circular')
>>> print(y)
Tensor(shape=[1, 1, 4, 6], dtype=float32, place=Place(cpu), stop_gradient=True,
[[[[6., 4., 5., 6., 4., 5.],
   [3., 1., 2., 3., 1., 2.],
   [6., 4., 5., 6., 4., 5.],
   [3., 1., 2., 3., 1., 2.]]]])