mindspore.ops.pad
- mindspore.ops.pad(input_x, padding, mode='constant', value=None)[源代码]
根据参数 padding 对输入进行填充。
- 参数:
input_x (Tensor) - 输入Tensor,shape为 \((N, *)\), \(*\) 代表任意附加维度。在Ascend后端运行时,不支持该维度大于5的情况。
padding (Union[tuple[int], list[int], Tensor]) - pad的填充位置。在Ascend后端运行时,不支持 padding 包含负值情况。 \(\left\lfloor\frac{\text{len(padding)}}{2}\right\rfloor\) 维度的 input_x 将会被填充。可根据以下示例以此类推:
示例:若只需要填充输入tensor的最后一个维度,则 padding 的填充方式为 \((\text{padding_left}, \text{padding_right})\);
示例:若只需要填充输入tensor的最后两个维度,则 padding 的填充方式为 \((\text{padding_left}, \text{padding_right}, \text{padding_top}, \text{padding_bottom})\);
示例:若只需要填充输入tensor的最后三个维度,则 padding 的填充方式为 \((\text{padding_left}, \text{padding_right}, \text{padding_top}, \text{padding_bottom}, \text{padding_front}, \text{padding_back})\);
mode (str,可选) - Pad的填充模式,可选择
'constant'
、'reflect'
、'replicate'
或者'circular'
。默认值:'constant'
。对于
'constant'
模式,请参考mindspore.nn.ConstantPad1d
作为示例来理解这个填充模式,并将这个模式扩展到n维。对于
'reflect'
模式,请参考mindspore.nn.ReflectionPad1d
作为示例来理解这个填充模式,reflect模式用于填充三维或者四维输入的最后两个维度,或者二维或三维输入的最后一个维度。对于
'replicate'
模式,请参考mindspore.nn.ReplicationPad1d
作为示例来理解这个填充模式,replicate模式用于填充四维或五维输入的最后三个维度、三维或四维输入的最后两个维度,或者二维或三维输入的最后一个维度。对于
'circular'
模式,circular模式用于将图像的像素从一侧循环地填充到另一侧。例如,右侧的像素将被替换为左侧的像素,底部的像素将被替换为顶部的像素。circular模式用于填充四维或五维输入的最后三个维度、三维或四维输入的最后两个维度,或者二维或三维输入的最后一个维度。
value (Union[int, float, None],可选) - 仅在
'constant'
模式下生效,设置在'constant'
模式下的填充值,如果值为None
,则会使用0作为默认填充值。默认值:None
。
- 返回:
填充后的Tensor。
- 异常:
TypeError - padding 不是全为int的tuple或者list。
TypeError - input_x 不是Tensor。
ValueError - padding 的长度不为偶数。
ValueError - padding 的长度大于6。
ValueError - mode 不为
'constant'
并且 value 不为None
。ValueError - 在Ascend后端运行时,input_x 的维度大于5。
ValueError - 在Ascend后端运行时,padding 中包含负值。
- 支持平台:
Ascend
GPU
CPU
样例:
>>> import mindspore as ms >>> import mindspore.ops as ops >>> import numpy as np >>> x = ms.Tensor(np.arange(1 * 2 * 2 * 2).reshape((1, 2, 2, 2)), dtype=ms.float64) >>> output = ops.pad(x, [1, 0, 0, 1], mode='constant', value=6.0) >>> print(output) [[[[6. 0. 1.] [6. 2. 3.] [6. 6. 6.]] [[6. 4. 5.] [6. 6. 7.] [6. 6. 6.]]]] >>> output1 = ops.pad(x, (1, 0, 0, 1), mode='reflect') >>> print(output1) [[[[1. 0. 1.] [3. 2. 3.] [1. 0. 1.]] [[5. 4. 5.] [7. 6. 7.] [5. 4. 5.]]]] >>> output2 = ops.pad(x, (1, 1, 2, 1), mode='replicate') >>> print(output2) [[[[0. 0. 1. 1.] [0. 0. 1. 1.] [0. 0. 1. 1.] [2. 2. 3. 3.] [2. 2. 3. 3.]] [[4. 4. 5. 5.] [4. 4. 5. 5.] [4. 4. 5. 5.] [6. 6. 7. 7.] [6. 6. 7. 7.]]]] >>> output3 = ops.pad(x, (1, 1, 2, 1), mode='circular') >>> print(output3) [[[[1. 0. 1. 0.] [3. 2. 3. 2.] [1. 0. 1. 0.] [3. 2. 3. 2.] [1. 0. 1. 0.]] [[5. 4. 5. 4.] [7. 6. 7. 6.] [5. 4. 5. 4.] [7. 6. 7. 6.] [5. 4. 5. 4.]]]]