Transpose
支持的产品型号
Atlas 训练系列产品
Atlas A2训练系列产品/Atlas 800I A2推理产品
Atlas 推理系列产品
函数功能
该函数不改变tensor数据的值,而是对tensor进行转置操作。
通过transpose算子,可以改变tensor在不同维度上的排列顺序,实现对tensor的维度重排。
具体的是将用户传入的输入tensor x的shape按指定维度的排列顺序perm进行转置并输出。
函数原型
- 输入和输出为不同地址
const aclTensor *Transpose(const aclTensor *x, const aclTensor *y, const aclTensor *perm, aclOpExecutor *executor)
- 输入和输出同一地址
const aclTensor *Transpose(const aclTensor *x, const aclIntArray *perm, aclOpExecutor *executor)
参数说明
参数 |
输入/输出 |
说明 |
---|---|---|
x |
输入/输出 |
原始输入tensor。输入tensor x需是连续内存数据。数据类型支持FLOAT16、FLOAT、INT8、INT16、INT32、INT64、UINT8、UINT16、UINT32、UINT64、BOOL、BFLOAT16。数据格式支持ND。
说明:
BFLOAT16适用于如下产品型号: Atlas A2训练系列产品/Atlas 800I A2推理产品 |
y |
输出 |
转置后输出tensor。数据类型和数据格式同x。 |
perm |
输入 |
指定维度的排列顺序,支持aclIntArray*、aclTensor*类型。最多支持8维转置。数据类型支持INT32、INT64。数据格式支持ND。 |
executor |
输入 |
op执行器,包含了算子计算流程。 |
返回值说明
转置成功,返回转置后的tensor;转置失败,返回nullptr。
约束说明
- 最多支持8维转置,即输入x和perm的dim至多为8。
- 输入x和perm的dim维度需要一致。
调用示例
// 固定写法,创建OpExecutor,参数检查 auto uniqueExecutor = CREATE_EXECUTOR(); CHECK_RET(uniqueExecutor.get() != nullptr, ACLNN_ERR_INNER_CREATE_EXECUTOR); // 固定写法,将输入self转换成连续的tensor auto selfContiguous = l0op::Contiguous(self, uniqueExecutor.get()); CHECK_RET(selfContiguous != nullptr, ACLNN_ERR_INNER_NULLPTR); int64_t dims = selfContiguous->GetViewShape().GetDimNum(); int64_t valuePerm[dims] = {0, 2, 1, 4}; auto perm = executor->AllocIntArray(valuePerm, dims); selfContiguous = l0op::Transpose(selfContiguous, perm, uniqueExecutor.get());