pad

paddle.nn.functional. pad ( x, pad, mode=’constant’, value=0.0, data_format=’NCHW’, name=None ) [源代码]

该OP依照 padmode 属性对 x 进行 pad。如果 mode'constant',并且 pad 的长度为 x 维度的2倍时,则会根据 padvaluex 从前面的维度向后依次补齐;否则只会对 x 在除 batch sizechannel 之外的所有维度进行补齐。如果 modereflect,则 x 对应维度上的长度必须大于对应的 pad 值。

参数:

  • x (Tensor) - Tensor,format可以为 'NCL', 'NLC', 'NCHW', 'NHWC', 'NCDHW''NDHWC',默认值为 'NCHW',数据类型支持float16, float32, float64, int32, int64。

  • pad (Tensor | List[int]) - 填充大小。当输入维度为3时,pad的格式为[pad_left, pad_right]; 当输入维度为4时,pad的格式为[pad_left, pad_right, pad_top, pad_bottom]; 当输入维度为5时,pad的格式为[pad_left, pad_right, pad_top, pad_bottom, pad_front, pad_back]。

  • mode (str) - padding的四种模式,分别为 'constant', 'reflect', 'replicate''circular''constant' 表示填充常数 value'reflect' 表示填充以 x 边界值为轴的映射; 'replicate' 表示 填充 x 边界值; 'circular' 为循环填充 x 。具体结果可见以下示例。默认值为 'constant'

  • value (float32) - 以 'constant' 模式填充区域时填充的值。默认值为0.0。

  • data_format (str) - 指定 x 的format,可为 'NCL', 'NLC', 'NCHW', 'NHWC', 'NCDHW''NDHWC',默认值为 'NCHW'

  • name (str, 可选) - 该参数供开发人员打印调试信息时使用,具体用法请参见 Name ,缺省值为None。

返回: 对 x 进行 'pad' 的结果,数据类型和 x 相同。

返回类型:Tensor

示例

  1. x = [[[[[1., 2., 3.],
  2. [4., 5., 6.]]]]]
  3. Case 0:
  4. pad = [2, 2, 1, 1, 0, 0],
  5. mode = 'constant'
  6. pad_value = 0
  7. Out = [[[[[0. 0. 0. 0. 0. 0. 0.]
  8. [0. 0. 1. 2. 3. 0. 0.]
  9. [0. 0. 4. 5. 6. 0. 0.]
  10. [0. 0. 0. 0. 0. 0. 0.]]]]]
  11. Case 1:
  12. pad = [2, 2, 1, 1, 0, 0],
  13. mode = 'reflect'
  14. Out = [[[[[6. 5. 4. 5. 6. 5. 4.]
  15. [3. 2. 1. 2. 3. 2. 1.]
  16. [6. 5. 4. 5. 6. 5. 4.]
  17. [3. 2. 1. 2. 3. 2. 1.]]]]]
  18. Case 2:
  19. pad = [2, 2, 1, 1, 0, 0],
  20. mode = 'replicate'
  21. Out = [[[[[1. 1. 1. 2. 3. 3. 3.]
  22. [1. 1. 1. 2. 3. 3. 3.]
  23. [4. 4. 4. 5. 6. 6. 6.]
  24. [4. 4. 4. 5. 6. 6. 6.]]]]]
  25. Case 3:
  26. pad = [2, 2, 1, 1, 0, 0],
  27. mode = 'circular'
  28. Out = [[[[[5. 6. 4. 5. 6. 4. 5.]
  29. [2. 3. 1. 2. 3. 1. 2.]
  30. [5. 6. 4. 5. 6. 4. 5.]
  31. [2. 3. 1. 2. 3. 1. 2.]]]]]

代码示例:

  1. import numpy as np
  2. import paddle
  3. import paddle.nn.functional as F
  4. # example 1
  5. x_shape = (1, 1, 3)
  6. x = paddle.arange(np.prod(x_shape), dtype="float32").reshape(x_shape) + 1
  7. y = F.pad(x, [2, 3], value=1, mode='constant', data_format="NCL")
  8. print(y)
  9. # [[[1. 1. 1. 2. 3. 1. 1. 1.]]]
  10. # example 2
  11. x_shape = (1, 1, 2, 3)
  12. x = paddle.arange(np.prod(x_shape), dtype="float32").reshape(x_shape) + 1
  13. y = F.pad(x, [1, 2, 1, 1], value=1, mode='circular')
  14. print(y)
  15. # [[[[6. 4. 5. 6. 4. 5.]
  16. # [3. 1. 2. 3. 1. 2.]
  17. # [6. 4. 5. 6. 4. 5.]
  18. # [3. 1. 2. 3. 1. 2.]]]]