Tensor管理
reshape
功能说明
设置或者改变Tensor shape。
函数原型
reshape(new_shape)
参数说明
参数名称 |
输入/输出 |
含义 |
---|---|---|
new_shape |
输入 |
指定新的Tensor对象的形状,支持List(int),tuple(int)类型。 须知:
当前版本由整数立即数组成的list或者tuple。 |
注意事项
- 新的shape的总大小和原来定义的shape的大小必须一致。
- 新tensor和原来的tensor内存指向同一块。新tensor的值修改后,原来的tensor值也会改变。
返回值
新的tensor。
调用示例
from te import tik tik_instance = tik.Tik() data_A = tik_instance.Tensor("float16", (128,), name="data_A", scope=tik.scope_gm) data_A.reshape((64,2))
reinterpret_cast_to
功能说明
改变Tensor的数据类型。以用户指定的数据类型,读取相同内存数据,并对内存中的字节重新解释,并不具有数据精度转化功能,如需进行数据精度转化请参考数据精度转换接口vec_conv。
例如:128个float16,则可以使用reinterpret_cast_to指定以float32的方式读取该段数据,会获得64个float32,因此reinterpret_cast_to并非真正将每一个float16数据转化成对应float32数据。
函数原型
reinterpret_cast_to(dtype)
参数说明
参数名称 |
输入/输出 |
含义 |
---|---|---|
dtype |
输入 |
指定Tensor对象的数据类型,取值: uint8、int8、uint16、int16、float16、uint32、int32、float32、uint64、int64 |
注意事项
- reinterpret_cast_to()的使用存在一些需要注意的限制,为了方便叙述,我们从用户的角度定义一个factor的概念:原本的数据类型的bit数除以指定类型数据的bit数,例如,原本用户申请tensor时申明内存上的数据是128个float16,但是现在期望指定以float32方式读取该段数据,则factor = 16/32 = 0.5。reinterpret_cast_to()的使用,仅局限于以下情形:
- factor必须大于零。
- 若factor大于1,factor必须是个整数。
- 若factor小于1,则用户需要注意数据的shape,shape的最后一维shape[-1]必须满足shape[-1] * factor为整数。对于原本的数据是128个float16,指定以float32方式读取的情形,若用户在这里将shape设置为(128, 1),则shape的最后一维为1,而此时factor是0.5,shape[-1] * factor = 1*0.5 = 0.5,非整数,说明我们无法将单个的float16以float32的形式读入,因此前端代码会报错“Error: Last dimension in shape multiplies factor should be an integer." 正确的调用方式是将shape直接设置为128。
返回值
新的tensor。
调用示例
示例1:
from te import tik tik_instance = tik.Tik() data_A = tik_instance.Tensor("float16", (16,), name="data_A", scope=tik.scope_gm) data_B = data_A.reinterpret_cast_to("uint32") data_C = data_B.reinterpret_cast_to("float16") """实际例子如下: 输入数据: data_A: [ 4.812e+00 1.870e-04 -5.692e-02 2.528e-02 -9.225e+02 -1.431e+02 -1.541e+01 -2.018e-03 1.653e-03 -4.090e+00 2.016e+01 -5.846e+04 -8.072e-03 2.627e+00 -3.174e-02 -3.088e-01] 输出数据: data_B: [ 169952464 645507913 3631866677 2552417204 3289847493 4213394698 1094819874 3035736080] data_C: [ 4.812e+00 1.870e-04 -5.692e-02 2.528e-02 -9.225e+02 -1.431e+02 -1.541e+01 -2.018e-03 1.653e-03 -4.090e+00 2.016e+01 -5.846e+04 -8.072e-03 2.627e+00 -3.174e-02 -3.088e-01] """
示例2:
from te import tik tik_instance = tik.Tik() data_A = tik_instance.Tensor("float16", (16,), name="data_A", scope=tik.scope_gm) data_B = data_A.reinterpret_cast_to("uint16") data_C = data_B.reinterpret_cast_to("float16") """实际例子如下: 输入数据: data_A: [ 4.566e+01 -7.880e+02 1.414e-04 -1.300e-02 -1.893e+03 -1.622e-01 -1.289e+00 2.478e+02 -3.107e+00 -2.072e+01 7.192e-01 -1.805e+00 3.259e+01 -3.181e-03 -3.248e-05 4.086e+04] 输出数据: data_B: [20917 57896 2210 41640 59237 45361 48424 23486 49719 52526 14785 48952 20499 39556 33313 30973] data_C: [ 4.566e+01 -7.880e+02 1.414e-04 -1.300e-02 -1.893e+03 -1.622e-01 -1.289e+00 2.478e+02 -3.107e+00 -2.072e+01 7.192e-01 -1.805e+00 3.259e+01 -3.181e-03 -3.248e-05 4.086e+04] """
获取Tensor部分数据
功能说明
通过Tensor数组下标,获得Tensor内部分数据,形成新的tensor。
函数原型
__getitem__(index_in)
参数说明
参数名称 |
输入/输出 |
含义 |
---|---|---|
index_in |
输入 |
Tensor数组下标,包括如下类型:
|
注意事项
- 用户在进行slice操作时,不同scope对齐要求不同,slice的start根据不同scope需要满足如下的要求:
- UB:32Byte对齐
- GM:无对齐要求
返回值
新的tensor。
调用示例
from te import tik tik_instance = tik.Tik() data_A = tik_instance.Tensor("float16", (128,), name="data_A", scope=tik.scope_gm) data_b = data_A[1]
改变Tensor内容
功能说明
通过Tensor数组下标,改变Tensor内容。
函数原型
__setitem__(index, value)
参数说明
参数名称 |
输入/输出 |
含义 |
---|---|---|
index |
输入 |
Tensor数组下标,包括如下类型:
|
value |
输入 |
具体的值,和Tensor定义 的数据类型相关 当前仅支持Scalar 变量,Expr,Tensor 变量,还不支持立即数。 |
注意事项
- 用户在进行slice操作时,不同scope对齐要求不同,slice的start根据不同scope需要满足如下的要求:
- UB:32Byte对齐
- GM:无对齐要求
返回值
None
调用示例
from te import tik tik_instance = tik.Tik() data_A = tik_instance.Tensor("float16", (128,), name="data_A", scope=tik.scope_ubuf) scalar_B = tik_instance.Scalar(dtype="float16", name="scalar_B", init_value=2.0) data_A[0].set_as(scalar_B)
shape
功能说明
获取tensor形状。
函数原型
shape()
参数说明
无。
注意事项
无
返回值
shape形状: 数据类型是list。
调用示例
from te import tik tik_instance = tik.Tik() data_A = tik_instance.Tensor("float16", (128,), name="data_A", scope=tik.scope_ubuf) data_A.shape();
返回:[128]
set_as
功能说明
设置或者改变Tensor 的内容。
函数原型
set_as(value, dst_offset=0, src_offset=None)
参数说明
参数名称 |
输入/输出 |
含义 |
---|---|---|
value |
输入 |
待设置的值。支持的数据类型:
|
dst_offset |
输入 |
保留参数,不建议使用。 |
src_offset |
输入 |
保留参数,不建议使用。 |
注意事项
- Scalar赋值给Tensor是必须保证两者数据类型一致。
- 支持Expr赋值给Tensor(int/uint),要求Expr中的Scalar类型为Scalar(int/uint),立即数类型为(int/float)。
- 昇腾310 AI处理器,不支持任何类型的Expr赋值给Scalar(float16/float32)。
返回值
无
调用示例
from te import tik tik_instance = tik.Tik() data_A = tik_instance.Tensor("float16", (128,), name="data_A", scope=tik.scope_ubuf) data_B = tik_instance.Tensor("float16", (128,), name="data_A", scope=tik.scope_ubuf) data_A[0].set_as(data_B[0])