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 |
输入 |
源操作数。 |
shape |
输入 |
目标Shape。 |
valid_shape |
输入 |
输出Tensor的有效数据的Shape,且valid_shape Size不大于INT32_MAX。 |
inplace |
输入 |
是否为inplace,默认为False;参数为True时,不会为输出申请新地址; |
返回值说明#
返回输出Tensor,Tensor的数据类型和input相同,形状(Shape)为输入参数指定的shape。
约束说明#
view生成的张量执行reshape,仅允许inplace为False。
inplace为True时,reshape通常需单独置于loop (1)中,无其他类型的operation并列时,可省略loop (1),框架自动补齐,见示例2。
inplace为True的输出,不可作为函数最终输出。
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],
[4],
[5]]
示例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([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]