昇腾社区首页
中文
注册

aclnnCrossEntropyLoss

产品支持情况

产品 是否支持
[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]
[object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]
[object Object]Atlas 200I/500 A2 推理产品[object Object] ×
[object Object]Atlas 推理系列产品 [object Object] ×
[object Object]Atlas 训练系列产品[object Object] ×

功能说明

  • 算子功能:计算输入的交叉熵损失。

  • 计算表达式:

    reductionOptional = mean时,交叉熵损失loss的计算公式为:

    ln=weightynlogexp(xn,yn)c=1Cexp(xn,c)1{yn != ignoreIndex}l_n = -weight_{y_n}*log\frac{exp(x_{n,y_n})}{\sum_{c=1}^Cexp(x_{n,c})}*1\{y_n\ !=\ ignoreIndex \} loss={n=1N1n=1Nweightyn1{yn != ignoreIndex}ln,if reductionOptional = ‘mean’n=1Nln,if reductionOptional = ‘sum’ {l0,l1,...,ln},if reductionOptional = ‘None’ loss=\begin{cases}\sum_{n=1}^N\frac{1}{\sum_{n=1}^Nweight_{y_n}*1\{y_n\ !=\ ignoreIndex \}}l_n,&\text{if reductionOptional = ‘mean’} \\\sum_{n=1}^Nl_n,&\text {if reductionOptional = ‘sum’ }\\\{l_0,l_1,...,l_n\},&\text{if reductionOptional = ‘None’ }\end{cases}

    log_prob计算公式为:

    lsen=logc=1Cexp(xn,c)lse_n = log*\sum_{c=1}^{C}exp(x_{n,c}) logProbn,c=xn,clsenlogProb_{n,c} = x_{n,c} - lse_n

    zloss计算公式为:

    zlossn=lseSquareScaleForZlosslsen2zloss_n = lseSquareScaleForZloss * (lse_n)^2

    其中,N为batch数,C为标签数。

函数原型

每个算子分为undefined,必须先调用“aclnnCrossEntropyLossGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnCrossEntropyLoss”接口执行计算。

  • aclnnStatus aclnnCrossEntropyLossGetWorkspaceSize(const aclTensor *input, const aclTensor *target, const aclTensor *weightOptional, char *reductionOptional, int64_t ignoreIndex, double labelSmoothing, double lseSquareScaleForZloss, bool returnZloss, const aclTensor *lossOut, const aclTensor *logProbOut, const aclTensor *zlossOut, const aclTensor *lseForZlossOut, uint64_t *workspaceSize, aclOpExecutor **executor)
  • aclnnStatus aclnnCrossEntropyLoss(void *workspace, uint64_t workspaceSize, aclOpExecutor *executor, aclrtStream stream)

aclnnCrossEntropyLossGetWorkspaceSize

  • 参数说明:

    • input(aclTensor*, 计算输入):表示输入,公式中的input,Device侧的aclTensor。数据类型支持FLOAT、FLOAT16、BFLOAT16。shape为(N,CN, C),NN为批处理大小,CC为标签数,必须大于0。undefined支持ND。
    • target(aclTensor*, 计算输入):表示标签,公式中的y,Device侧的aclTensor。shape为(NN),N与input第零维相等,数值在[0, C)之间。undefined支持ND。
      • [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持INT64。
    • weightOptional(aclTensor*, 计算输入):表示为每个类别指定的缩放权重,公式中的weight。Device侧的aclTensor。数据类型支持FLOAT。shape为(CC)。如果不给定,则不对target加权。undefined支持ND。
    • reductionOptional(char*, 计算输入):表示loss的归约方式。Host侧的String,支持["mean", "sum", "none"]。
    • ignoreIndex(int64_t, 计算输入):指定忽略的标签。Host侧的整型。数值必须小于CC,当小于零时视为无忽略标签。
    • labelSmoothing(double, 计算输入):表示计算loss时的平滑量。Host侧的浮点型。数值在[0.0, 1.0]之间。
    • lseSquareScaleForZloss(double, 计算输入):表示zloss计算所需的scale。Host侧的浮点型。公式中的lse_square_scale_for_zloss。数值在[0, 1)之间。当前仅支持传入0。
    • returnZloss(bool, 计算输入):控制是否返回zloss输出。Host侧的布尔值。需要输出zLoss时传入True,否则传入False。当前仅支持传入False。
    • lossOut(aclTensor*,计算输出):表示输出损失。Device侧的aclTensor。数据类型与input相同。reductionOptional为"None"时,shape为[N],与input第零维一致;否则shape为[1]。undefined支持ND。
    • logProbOut(aclTensor*,计算输出):输出给反向计算的输出。Device侧的aclTensor。数据类型与input相同。shape为[N,CN,C],与input一致。undefined支持ND。
    • zlossOut(aclTensor*,计算输出):表示辅助损失。Device侧的aclTensor。数据类型与input相同。shape为与loss一致。undefined支持ND。当return_zloss为True时,输出zloss,否则输出为None。当前暂不支持。
    • lseForZlossOut(aclTensor*,计算输出):表示zloss场景输出给反向的Tensor,lseSquareScaleForZloss为0时输出为None。Device侧的aclTensor。数据类型与input相同。shape为[N],与input的第零维一致。undefined支持ND。当前暂不支持。
    • workspaceSize(uint64_t*, 出参):返回需要在Device侧申请的workspace大小。
    • executor(aclOpExecutor**, 出参):返回op执行器,包含了算子计算流程。
  • 返回值:

    返回aclnnStatus状态码,具体参见undefined

    [object Object]

aclnnCrossEntropyLoss

  • 参数说明:

    • workspace(void*, 入参): 在Device侧申请的workspace内存地址。
    • workspaceSize(uint64_t, 入参): 在Device侧申请的workspace大小,由第一段接口aclnnCrossEntropyLossGetWorkspaceSize获取。
    • executor(aclOpExecutor*, 入参): op执行器,包含了算子计算流程。
    • stream(aclrtStream, 入参): 指定执行任务的Stream。
  • 返回值:

    • aclnnStatus: 返回状态码,具体参见undefined

约束说明

  • target仅支持类标签索引,不支持概率输入。
  • 当前暂不支持zloss相关功能。lseSquareScaleForZloss、returnZloss仅支持传入nullptr。
  • input第零维N需满足N<200000。

调用示例

示例代码如下,仅供参考,具体编译和执行过程请参考undefined

[object Object]