在华为昇腾AI处理器的算子中,axis(轴)是一个关键概念,用于指定对张量(Tensor)的哪个维度进行操作。轴本质上是张量形状(shape)中维度的下标,可以是正数或负数,正数表示从第一个维度开始计数,负数表示从最后一个维度倒数。例如,在一个形状为(2, 2, 2)的三维张量中,axis=0代表第一个维度(最外层),axis=1代表第二个维度,axis=2代表第三个维度(最内层);如果使用负数,axis=-1则指向最后一个维度。

在这里插入图片描述

axis的具体作用取决于算子类型。在降维(Reduction)操作中,如求和或最大值计算,axis指定了要缩减的维度。例如,如果axis=0,会对第一个维度的所有元素进行操作,从而减少该维度的大小;如果axis=[0,1],则会依次对多个维度进行降维。 在广播(Broadcast)等操作中,axis也用于控制数据对齐和扩展的轴向。 此外,axis的取值范围通常为[-N, N-1],其中N是张量的总维度数,这允许灵活地处理不同形状的张量。

理解axis对于正确实现算子逻辑和优化性能至关重要,因为它直接影响数据访问模式和计算流程。在华为CANN(Compute Architecture for Neural Networks)框架中,axis作为算子属性的一部分,被广泛用于编译优化和硬件调度。

轴(Axis)

axis代表张量中纬度的下标,可以理解为展开n次后的数据。

在华为算子中,axis(轴)用于指定对张量(Tensor)的哪个维度进行操作。张量是一种多维数组,其维度的下标从0开始,axis参数决定了算子(如归约、求和等操作)作用于哪个轴。

  • 基本概念:axis代表张量中维度的下标。例如,对于一个形状为(4, 20, 20, 3)的张量(如4张20×20的RGB图片),axis=0对应第一维(图片数量),axis=1对应第二维(高度),axis=2对应第三维(宽度),axis=3对应第四维(颜色通道)。 在二维张量(如5行6列的矩阵)中,axis=0表示行,axis=1表示列。

  • 负数轴索引:axis可以为负数,表示从末尾开始索引。例如,axis=-1表示最后一维,axis=-2表示倒数第二维,这在处理可变维度的张量时非常有用。

  • 在算子中的应用:不同算子使用axis的方式不同。例如:

    • 在归约算子(reduction)中,axis指定需要压缩的轴。如果axis=0,会对每行对应的数据进行求和,从而降低维度;如果axis=[0,1],会先沿轴0求和,再沿轴1求和,最终得到标量。
    • 对于卷积等算子,axis可能用于控制数据格式转换(如NHWC到NC1HWC0),其中axis参数影响张量的内存布局和计算效率。
  • 注意事项:axis的取值范围通常为[-N, N-1],其中N是张量的维度数。如果axis为空或未指定,算子可能对所有维度进行操作(如全局求和)。 正确理解axis有助于优化算子性能,尤其是在昇腾AI处理器上进行开发时。

在这里插入图片描述

轴是相对shape来说的,轴代表张量的shape的下标,比如张量a是一个5行6列的二维数组,即shape是(5,6),则axis=0表示是张量中的第一维,即行。axis=1表示是张量中的第二维,即列。

例如张量数据[[[1,2],[3,4]], [[5,6],[7,8]]],Shape为(2,2,2),则轴0代表第一个维度的数据即[[1,2],[3,4]]与[[5,6],[7,8]]这两个矩阵,轴1代表第二个维度的数据即[1,2]、[3,4]、[5,6]、[7,8]这四个数组,轴2代表第三个维度的数据即1,2,3,4,5,6,7,8这八个数。

轴axis可以为负数,此时表示是倒数第axis个维度。

N维Tensor的轴有:0 , 1, 2,……,N-1。


昇腾训练营报名链接:
https://www.hiascend.com/developer/activities/cann20252#cann-camp-2502-intro

训练营简介:2025年昇腾CANN训练营第二季,基于CANN开源开放全场景,推出0基础入门系列、码力全开特辑、开发者案例等专题课程,助力不同阶段开发者快速提升算子开发技能。获得Ascend C算子中级认证,即可领取精美证书,完成社区任务更有机会赢取华为手机,平板、开发板等大奖

Logo

CANN开发者社区旨在汇聚广大开发者,围绕CANN架构重构、算子开发、部署应用优化等核心方向,展开深度交流与思想碰撞,携手共同促进CANN开放生态突破!

更多推荐