pypto.pad#

产品支持情况#

  • Ascend 950PR:支持

  • Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持

  • Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持

功能说明#

对输入Tensor进行填充(Padding)。

填充大小根据pad参数从输入Tensor的最后一个维度开始,由后向前依次描述。pad参数的格式为 \((pad\_left, pad\_right, pad\_top, pad\_bottom, ...)\)。当前实现仅支持对最后两个维度进行常量(Constant)模式的右侧(Right)和底部(Bottom)填充。

函数原型#

pad(input: Tensor, pad: Sequence[int], mode: str = "constant", value: Union[float, int] = 0) -> Tensor

参数说明#

参数名

输入/输出

说明

input

输入

需要进行填充的源操作数。
支持的类型为:Tensor。
Tensor支持的数据类型为:DT_FP32、DT_FP16、DT_BF16、DT_INT8、DT_INT16、DT_INT32、DT_UINT8、DT_UINT16、DT_UINT32。
不支持空Tensor;Shape仅支持1-4维;Shape Size不大于2147483647(即INT32_MAX)。

pad

输入

填充大小序列。
支持的类型为:tuple或list (包含int)。
序列长度 \(m\) 必须为偶数,且满足 \(\frac{m}{2} \leq\) input的维度数。
格式为:(pad_left, pad_right, pad_top, pad_bottom, ...)
所有填充大小序列的值必须为非负整数,负值不支持。

mode

输入

填充模式。
支持的类型为:str。
可选值为'constant''reflect''replicate''circular'
默认值:'constant'
注意:当前仅支持'constant'模式。

value

输入

当填充模式为常量填充('constant')时的填充值。
支持的类型为:float或int。
对于浮点类型(DT_FP32、DT_FP16、DT_BF16),支持任意浮点数值,包括-infinf0.0以及其他任意浮点数(如1.0-1.00.5等)。
对于整型类型(DT_INT8、DT_INT16、DT_INT32、DT_UINT8、DT_UINT16、DT_UINT32),value仅支持整数值,不支持传入float('-inf')float('inf'),PyPTO会抛出ValueError提示用户传入实际整数值。
默认值:0

返回值说明#

返回输出Tensor,Tensor的数据类型和input相同,Shape为根据pad参数在对应维度上扩展后的大小。

约束说明#

  1. pad参数的长度必须为2或者4,pad参数中的填充大小序列的值必须为非负整数。负值填充不支持。如果传入负值,将抛出ValueError

  2. 当前仅支持多维情况下在右侧(Right)和底部(Bottom)进行填充,或者1维情况下在右侧(Right)填充。即pad序列中向左和向上的填充量必须为0(例如格式必须为(0, pad_right, 0, pad_bottom)或者(0, pad_right) )。

  3. mode当前仅支持'constant'(常量填充)模式,其他模式暂不支持。

  4. 整型类型不支持浮点值:对于整型dtype(DT_INT8、DT_INT16、DT_INT32、DT_UINT8、DT_UINT16、DT_UINT32),value参数不支持传入float类型的值,PyPTO会抛出ValueError。如需填充整型的最小/最大值,请显式传入对应dtype的实际值(如int32-2147483648int16-32768)。

  5. 如果input不是Tensor类型,或pad不是整数序列,将抛出TypeError

  6. Tensor类型输入不支持TileOpFormat.TILEOP_NZ格式。

调用示例#

TileShape设置示例#

说明:调用该operation接口前,应通过set_vec_tile_shapes设置TileShape。

TileShape维度应和输出一致。

示例1:输入input shape为[m, n],如果对其在n轴右侧填充了p,则输出shape为[m, n+p],TileShape设置为[m1, n1],则m1, n1分别用于切分输出的m, n+p轴。

pypto.set_vec_tile_shapes(4, 16)

接口调用示例#

# 示例:对一个shape为 [1, 1, 2, 2] 的Tensor进行填充
# 最后一个维度(右侧)填充1
# 倒数第二个维度(底部)填充1
t4d = pypto.tensor([0.0, 1.0, 2.0, 3.0], pypto.DT_FP32)
# 假设内部已将一维数据reshape为 [1, 1, 2, 2]

p1 = (0, 1, 0, 1)  # (pad_left=0, pad_right=1, pad_top=0, pad_bottom=1)
out = pypto.pad(t4d, p1, mode="constant", value=0.0)

结果示例如下:

# 输入数据t4d (逻辑shape为 [1, 1, 2, 2]):
[[[[0.0, 1.0],
   [2.0, 3.0]]]]

# 输出数据out (逻辑shape扩展为 [1, 1, 3, 3]):
[[[[0.0, 1.0, 0.0],
    [2.0, 3.0, 0.0],
    [0.0, 0.0, 0.0]]]]