news 2026/5/10 6:51:05

cann/cann-bench CrossEntropyLoss算子API描述

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
cann/cann-bench CrossEntropyLoss算子API描述

CrossEntropyLoss 算子 API 描述

【免费下载链接】cann-bench评测AI在处理CANN领域代码任务的能力,涵盖算子生成、算子优化等领域,支撑模型选型、训练效果评估,统一量化评估标准,识别Agent能力短板,构建CANN领域评测平台,推动AI能力在CANN领域的持续演进。项目地址: https://gitcode.com/cann/cann-bench

1. 算子简介

计算交叉熵损失,用于分类任务。

主要应用场景

  • 多分类任务的损失函数(图像分类、文本分类等)
  • 语言模型的 next-token 预测训练
  • 支持硬标签(类别索引)和软标签(概率分布)两种模式

算子特征

  • 难度等级:L2(NumericalStable)
  • 双输入(logits 和 target)单输出(loss),涉及 softmax、对数、归约等多步计算
  • 输入 x 为 (N, C) 或更高维的 logits 张量,target 为 (N,) 的类别索引或 (N, C) 的软标签

2. 算子定义

数学公式

基本公式

$$ L = -\log\left(\frac{\exp(x_{target})}{\sum_{j}\exp(x_j)}\right) $$

等价于:

$$ L = -x_{target} + \log\left(\sum_{j}\exp(x_j)\right) $$

带权重的公式

$$ L = -weight_{target} \cdot \log\left(\frac{\exp(x_{target})}{\sum_{j}\exp(x_j)}\right) $$

其中:

  • reduction='none'时返回每个样本的损失,shape 为 (N,)
  • reduction='mean'时返回 batch 平均损失(标量)
  • reduction='sum'时返回 batch 总损失(标量)
  • ignore_index指定的标签不参与损失计算

3. 接口规范

算子原型

cann_bench.cross_entropy_loss(Tensor x, Tensor target, str reduction, int ignore_index) -> Tensor loss

输入参数说明

参数类型默认值描述
xTensor必选输入 logits 张量(未经 softmax)
targetTensor必选目标标签索引(hard labels)或概率分布(soft labels)
reductionstring"mean"损失聚合方式 ('none' | 'mean' | 'sum')
ignore_indexint-100忽略的标签索引(不影响损失计算)

输出

参数Shapedtype描述
lossreduction='none' 时为 (N,),否则为标量与输入 x 相同损失值

数据类型

x dtypetarget dtype输出 dtype
float32int32 / int64float32
float16int32 / int64float16
bfloat16int32 / int64bfloat16
float32float32float32
float16float16float16
bfloat16bfloat16bfloat16

规则与约束

  • x 的 shape 为 (N, C) 或 (N, C, d1, d2, ...),其中 N 为 batch size,C 为类别数
  • 硬标签模式:target 的 shape 为 (N,) 或 (N, d1, d2, ...),值为 [0, C) 范围内的类别索引
  • 软标签模式:target 的 shape 为 (N, C),值为概率分布
  • ignore_index仅在硬标签模式下生效
  • 输入 x 应为原始 logits(未经 softmax),内部自动应用 log_softmax
  • 需注意数值稳定性:内部实现应使用 log-sum-exp 技巧避免溢出

4. 精度要求

采用生态算子精度标准进行验证。

误差指标

  1. 平均相对误差(MERE):采样点中相对误差平均值

    $$ \text{MERE} = \text{avg}(\frac{\text{abs}(actual - golden)}{\text{abs}(golden)+\text{1e-7}}) $$

  2. 最大相对误差(MARE):采样点中相对误差最大值

    $$ \text{MARE} = \max(\frac{\text{abs}(actual - golden)}{\text{abs}(golden)+\text{1e-7}}) $$

通过标准

数据类型FLOAT16BFLOAT16FLOAT32HiFLOAT32FLOAT8 E4M3FLOAT8 E5M2
通过阈值(Threshold)2^-102^-72^-132^-112^-32^-2

当平均相对误差 MERE < Threshold,最大相对误差 MARE < 10 * Threshold 时判定为通过。

5. 标准 Golden 代码

import torch """ CrossEntropyLoss 算子 Torch Golden 参考实现 计算交叉熵损失,用于分类任务 公式: L = -log(exp(x[target]) / sum(exp(x))) 或带 weight: L = -weight[target] * log(exp(x[target]) / sum(exp(x))) 参考 PyTorch API: torch.nn.CrossEntropyLoss https://pytorch.org/docs/stable/generated/torch.nn.CrossEntropyLoss.html Parameters: - input: (N, C) 或 (N, C, H, W) 等 - logits 张量(未经 softmax) - target: (N,) 硬标签 或 (N, C) 软标签(概率分布) - weight: (C,) 各类别的权重(可选) - ignore_index: int, 默认 -100 - 忽略的标签索引 - reduction: 'none' | 'mean' | 'sum', 默认 'mean' - 损失聚合方式 """ def cross_entropy_loss( x: torch.Tensor, target: torch.Tensor, reduction: str = 'mean', ignore_index: int = -100 ) -> torch.Tensor: """ 计算交叉熵损失 Args: x: 输入 logits 张量,shape (N, C) 或 (N, C, d1, d2, ...) N = batch size, C = 类别数(channel_first 约定) 注意:输入应为 logits(未经 softmax),内部会自动应用 log_softmax target: 目标标签 - 硬标签:shape (N,) 或 (N, d1, d2, ...),值为类别索引 - 软标签:shape (N, C),值为概率分布 reduction: 损失聚合方式 'none': 返回每个样本的损失,shape (N,) 'mean': 返回 batch 平均损失 'sum': 返回 batch 总损失 ignore_index: 忽略的标签索引 当 target 为硬标签且值为 ignore_index 时,该样本不计入损失 Returns: 损失值:如果 reduction='none',返回 shape (N,) 的张量 否则返回标量张量 Examples: >>> N, C = 16, 10 # 16个样本,10个类别 >>> x = torch.randn(N, C) >>> target = torch.randint(0, C, (N,)) >>> loss = cross_entropy_loss(x, target) """ # 直接调用 PyTorch 标准 CrossEntropyLoss 实现 # torch.nn.functional.cross_entropy 内部会自动应用 log_softmax loss = torch.nn.functional.cross_entropy( input=x, target=target, reduction=reduction, ignore_index=ignore_index ) return loss

6. 额外信息

算子调用示例

import torch import cann_bench x = torch.randn(1024, 2048, dtype=torch.float32, device="npu") target = torch.randint(0, 2048, (1024,), dtype=torch.int64, device="npu") loss = cann_bench.cross_entropy_loss(x, target, reduction="mean", ignore_index=-100) loss = cann_bench.cross_entropy_loss(x, target, reduction="sum", ignore_index=-100) loss = cann_bench.cross_entropy_loss(x, target, reduction="none", ignore_index=-100)

【免费下载链接】cann-bench评测AI在处理CANN领域代码任务的能力,涵盖算子生成、算子优化等领域,支撑模型选型、训练效果评估,统一量化评估标准,识别Agent能力短板,构建CANN领域评测平台,推动AI能力在CANN领域的持续演进。项目地址: https://gitcode.com/cann/cann-bench

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 6:50:41

量子门脉冲校准技术原理与实践指南

1. 量子门脉冲校准基础原理量子计算中的脉冲校准技术&#xff0c;本质上是将抽象的量子门操作转化为精确的微波脉冲参数的过程。对于超导量子比特系统&#xff0c;我们通常使用微波脉冲来驱动量子态在布洛赫球面上的演化。以X门&#xff08;即π脉冲&#xff09;为例&#xff0…

作者头像 李华
网站建设 2026/5/10 6:45:56

Arm虚拟化时间管理:被窃时间机制与优化

1. Arm虚拟化环境下的时间管理挑战在虚拟化环境中&#xff0c;时间管理一直是系统设计中最棘手的难题之一。想象一下&#xff0c;当你同时运行多个虚拟机时&#xff0c;每个虚拟机都认为自己独占硬件资源&#xff0c;包括计时器。但实际上&#xff0c;物理CPU需要在多个虚拟机之…

作者头像 李华
网站建设 2026/5/10 6:44:58

AI智能体状态持久化:基于talos-identity-anchor的OpenClaw记忆备份方案

1. 项目概述与核心价值最近在折腾一个叫OpenClaw的AI智能体框架&#xff0c;发现一个挺有意思但又很实际的问题&#xff1a;这些智能体在运行过程中会形成自己的“人格”和记忆&#xff0c;比如SOUL.md文件里定义的目标、性格&#xff0c;还有MEMORY.md里记录的历史对话和决策。…

作者头像 李华
网站建设 2026/5/10 6:42:58

杰理之设置IO状态的方法【篇】

u32 port PORTA;//指定IO u32 pin PORT_PIN_2; gpio_hw_set_direction(port, pin, 1);//0:out, 1:in gpio_hw_set_die(port, pin, 0); gpio_hw_set_dieh(port, pin, 0); gpio_hw_set_pull_up(port, pin, GPIO_PULLUP_10K); gpio_hw_set_pull_down(port, pin, GPIO_PULLDOWN_1…

作者头像 李华
网站建设 2026/5/10 6:39:00

AI助手安全审计:MCP服务器安全扫描与配置防护实战

1. 项目概述&#xff1a;为你的AI助手装上“安全雷达”如果你和我一样&#xff0c;日常重度依赖Claude、Cursor这类AI编程助手&#xff0c;并且已经开始尝试通过MCP服务器来扩展它们的能力——比如让AI直接读写数据库、调用外部API&#xff0c;那你一定也和我有过同样的担忧&am…

作者头像 李华