pypto.reshape#

产品支持情况#

产品

是否支持

Ascend 950PR/Ascend 950DT

Atlas A3 训练系列产品/Atlas A3 推理系列产品

Atlas A2 训练系列产品/Atlas A2 推理系列产品

功能说明#

改变Tensor形状,改变valid_shape部分的形状(Shape)

注意事项#

  • 静态 shape 支持 -1:当 tensor 所有轴都是静态维度时,shape 参数支持使用 -1 自动推导一个维度

  • 动态 shape 不支持 -1:当 tensor 有轴标注为 pypto.DYNAMIC 时,shape 参数不能使用 -1,必须显式指定所有维度值, 从动态轴 tensor.shape 获取的维度是 SymbolicScalar 类型,可用于 reshape 的 shape 参数

  • 推荐使用 inplace 参数:当满足 inplace 的约束说明时,设置 inplace=True 可以避免额外的数据搬移

函数原型#

reshape(input: Tensor,shape: List[int],*,valid_shape: Optional[List[Union[int, SymbolicScalar]]] = None, inplace: bool = False) -> Tensor

参数说明#

参数名

输入/输出

说明

input

输入

源操作数。
支持的数据类型为:PyPTO支持的数据类型
不支持空Tensor,Shape Size不大于INT32_MAX。

shape

输入

目标Shape。
Shape Size不大于INT32_MAX。
- 静态 shape:支持使用 -1 自动推导一个维度。
- 动态 shape:不支持 -1,必须显式指定所有维度值。维度值可以是具体整数或 SymbolicScalar(从动态轴获取)。

valid_shape

输入

输出Tensor的有效数据的Shape,且valid_shape Size不大于INT32_MAX。

inplace

输入

是否为inplace,默认为false;参数为True时,不会为输出申请新地址;

返回值说明#

返回输出Tensor,Tensor的数据类型和input相同,形状(Shape)为输入参数指定的shape。

约束说明#

约束说明

  1. view 生成的张量执行 reshape,仅允许 inplace 为 false。

  2. inplace 为 true 时,reshape 通常需单独置于 loop (1) 中,无其他类型的operation并列时,可省略loop (1),框架自动补齐,见示例2。

  3. inplace 为 true 的输出,不可作为函数最终输出。

  4. inplace=false 仅适配静态shape;inplace=true 兼容shape、动态shape。

调用示例#

示例1:

x = pypto.tensor([2, 2], pypto.DT_FP32)
y = pypto.reshape(x, [4, 1], [2, 1])
z = pypto.add(y, 1.0)

结果示例如下:

输入数据x: [[1, 2],
            [3, 4]]
输出数据y: [[1],
            [2],
            [3],
            [4]]
输出数据z: [[2],
            [3],
            [3],
            [4]]

示例2:

x = pypto.tensor([2, 2], pypto.DT_FP32)
# reshape(..., inplace=True) 单独在loop(1)内。loop(1) 可省略
for _ in pypto.loop(1, name="reshape_inplace", idx_name="tmp_loop"):
    x_1 = x.reshape(x, [4], inplace=True)
for _ in pypto.loop(1, name="loop", idx_name="loop"):
    y = pypto.add(x_1, 1.0)

结果示例如下:

输入数据x: [[1, 2],
            [3, 4]]
输出数据y: [2, 3, 4, 5]