ExpSegsumGrad
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | × |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | × |
| Atlas 推理系列产品 | × |
| Atlas 训练系列产品 | × |
功能说明
-
算子功能:Segsum的反向计算。
-
计算公式(以5D输入为例):
-
输入gradOutput(N1,N2,N3,N4,N4)与输入gradSelf(正向的输出)相乘。
out_mul=gradOutput∗gradSelfout\_mul = gradOutput * gradSelf
-
生成(N4,N4)类型为bool的三角矩阵A,上三角为True,下三角为False,对角线为True。
-
用0填充输入out_mulout\_mul里面与矩阵A中值为True的位置相对应的元素。
out_muli={out_muli,Ai==False0,Ai==Trueout\_mul_i= \begin{cases}out\_mul_i,\quad A_i==False \\0, \quad A_i==True \end{cases}
-
对out_mul的倒数第二维进行倒序生成out_flip。
-
以out_flipout\_flip的倒数第二维进行cumsum累加。从维度视角来看的某个元素(其它维度下标不变,当前维度下标依次递增),out_cumsum_iout\_cumsum\_{i}是输出张量中对应位置的元素。
out_cumsumi=out_flip1+out_flip2+out_flip3+......+out_flipiout\_cumsum_{i} = out\_flip_{1} + out\_flip_{2} + out\_flip_{3} + ...... + out\_flip_{i}
-
对out_cumsumout\_cumsum的-2维进行倒序生成out_flip2。
-
生成(N4,N4)类型为bool的三角矩阵B,上三角为True,下三角为False,对角线为True。
-
用0填充out_flip2out\_flip2里面与矩阵B中值为True的位置相对应的元素。
out_flip2i={out_flip2i,Bi==False0,Bi==Trueout\_flip2_i= \begin{cases}out\_flip2_i,\quad B_i==False \\0, \quad B_i==True \end{cases}
-
返回gradInput为out_flip2最后一维每行的和。
-
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| grad_output | 输入 | 表示进行反向计算的梯度,对应公式中的`gradOutput`。输入维度支持4D或5D,且最后两维的维度大小相同。 | FLOAT32、FLOAT16、BFLOAT16 | ND |
| grad_self | 输入 | 表示正向计算的输出,对应公式中的`gradSelf`。shape和数据类型与输入`grad_output`保持一致。 | FLOAT32、FLOAT16、BFLOAT16 | ND |
| grad_input | 输出 | 表示反向计算的输出,对应公式中的`out`。输出维度必须比输入维度少一维,支持3D或4D。当输入`grad_output`为4D时,输出的维度大小与`grad_output`的前3维保持一致;当输入`grad_output`为5D时,输出的维度大小与`grad_output`的前4维保持一致。数据类型与输入`grad_output`保持一致。 | FLOAT32、FLOAT16、BFLOAT16 | ND |
约束说明
无
调用说明
| 调用方式 | 样例代码 | 说明 |
|---|---|---|
| aclnn接口 | test_aclnn_exp_segsum_backward | 通过aclnnExpSegsumBackward接口方式调用ExpSegsumGrad算子。 |