当前位置: 首页 > article >正文

CANN/ops-nn二元交叉熵损失算子

aclnnBinaryCrossEntropyWithLogits【免费下载链接】ops-nn本项目是CANN提供的神经网络类计算算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-nn 查看源码产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√Atlas 200I/500 A2 推理产品×Atlas 推理系列产品√Atlas 训练系列产品√功能说明接口功能计算输入logits与标签target之间的BCELoss损失。计算公式单标签场景$$ \ell(self, target) L {l_{1},..., l_{n}}^{T} $$$$ \ell_{n} -weight_{n}[target_{n} \cdot log(\sigma(self_{n})) (1 - target_{n}) \cdot log(1 - \sigma(self_{n}))] $$$$ \ell(self, target) \begin{cases} L, if\ reduction none\ mean(L), if\ reduction mean\ sum(L), if\ reduction sum\ \end{cases} $$多标签场景$$ \ell_c(self, target) L_c {l_{1,c},..., l_{n,c}}^{T} $$$$ \ell_{n,c} -weight_{n,c}[pos_weight_{n,c} \cdot target_{n,c} \cdot log(\sigma(self_{n,c})) (1 - target_{n,c}) \cdot log(1 - \sigma(self_{n,c}))] $$函数原型每个算子分为两段式接口必须先调用“aclnnBinaryCrossEntropyWithLogitsGetWorkspaceSize”接口获取入参并根据流程计算所需workspace大小再调用“aclnnBinaryCrossEntropyWithLogits”接口执行计算。aclnnStatus aclnnBinaryCrossEntropyWithLogitsGetWorkspaceSize( const aclTensor *self, const aclTensor *target, const aclTensor *weightOptional, const aclTensor *posWeightOptional, int64_t reduction, aclTensor *out, uint64_t *workspaceSize, aclOpExecutor **executor)aclnnStatus aclnnBinaryCrossEntropyWithLogits( void *workspace, uint64_t workspaceSize, aclOpExecutor *executor, const aclrtStream stream)aclnnBinaryCrossEntropyWithLogitsGetWorkspaceSize参数说明参数名输入/输出描述使用说明数据类型数据格式维度(shape)非连续TensorselfaclTensor*输入连接层输出。-FLOAT16、FLOAT、BFLOAT16ND1-8√targetaclTensor*输入label标签值。-与self保持一致ND与self保持一致√weightOptionalaclTensor*输入二分交叉熵权重。shape需要能够broadcast到target与self保持一致ND1-8√posWeightOptionalaclTensor*输入各类的正类权重。shape需要能够broadcast到target与self保持一致ND1-8√reductionint64_t输入输出结果计算方式。支持0(none)|1(mean)|2(sum)。0表示不做任何操作1表示对结果取平均值2表示对结果求和INT64---outaclTensor*输出输出误差。如果reduction 0shape与self一致其他情况shape为[1]与target保持一致ND与self保持一致√workspaceSizeuint64_t*输出返回需要在Device侧申请的workspace大小。-----executoraclOpExecutor**输出返回op执行器包含了算子计算流程。-----Atlas 推理系列产品 、 Atlas 训练系列产品 数据类型不支持BFLOAT16。返回值aclnnStatus: 返回状态码具体参见aclnn返回码。第一段接口完成入参校验出现以下场景时报错返回值错误码描述ACLNN_ERR_PARAM_NULLPTR161001传入的self或out为空指针。ACLNN_ERR_PARAM_INVALID161002self、target、weightOptional和posWeightOptional的数据类型和数据格式不在支持的范围内。self和target维度不一致。weightOptional、posWeightOptional不能扩展成self/target形状。aclnnBinaryCrossEntropyWithLogits参数说明参数名输入/输出描述workspace输入在Device侧申请的workspace内存地址。workspaceSize输入在Device侧申请的workspace大小由第一段接口aclnnBinaryCrossEntropyWithLogitsGetWorkspaceSize获取。executor输入op执行器包含了算子计算流程。stream输入指定执行任务的Stream。返回值aclnnStatus: 返回状态码具体参见aclnn返回码。约束说明确定性计算aclnnBinaryCrossEntropyWithLogits默认确定性实现。调用示例示例代码如下仅供参考具体编译和执行过程请参考编译与运行样例。#include iostream #include vector #include acl/acl.h #include aclnnop/aclnn_binary_cross_entropy_with_logits.h #define CHECK_RET(cond, return_expr) \ do { \ if (!(cond)) { \ return_expr; \ } \ } while (0) #define LOG_PRINT(message, ...) \ do { \ printf(message, ##__VA_ARGS__); \ } while (0) int64_t GetShapeSize(const std::vectorint64_t shape) { int64_t shapeSize 1; for (auto i : shape) { shapeSize * i; } return shapeSize; } int Init(int32_t deviceId, aclrtStream* stream) { // 固定写法资源初始化 auto ret aclInit(nullptr); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(aclInit failed. ERROR: %d\n, ret); return ret); ret aclrtSetDevice(deviceId); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(aclrtSetDevice failed. ERROR: %d\n, ret); return ret); ret aclrtCreateStream(stream); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(aclrtCreateStream failed. ERROR: %d\n, ret); return ret); return 0; } template typename T int CreateAclTensor(const std::vectorT hostData, const std::vectorint64_t shape, void** deviceAddr, aclDataType dataType, aclTensor** tensor) { auto size GetShapeSize(shape) * sizeof(T); // 调用aclrtMalloc申请Device侧内存 auto ret aclrtMalloc(deviceAddr, size, ACL_MEM_MALLOC_HUGE_FIRST); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(aclrtMalloc failed. ERROR: %d\n, ret); return ret); // 调用aclrtMemcpy将Host侧数据拷贝到Device侧内存上 ret aclrtMemcpy(*deviceAddr, size, hostData.data(), size, ACL_MEMCPY_HOST_TO_DEVICE); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(aclrtMemcpy failed. ERROR: %d\n, ret); return ret); // 计算连续tensor的strides std::vectorint64_t strides(shape.size(), 1); for (int64_t i shape.size() - 2; i 0; i--) { strides[i] shape[i 1] * strides[i 1]; } // 调用aclCreateTensor接口创建aclTensor *tensor aclCreateTensor(shape.data(), shape.size(), dataType, strides.data(), 0, aclFormat::ACL_FORMAT_ND, shape.data(), shape.size(), *deviceAddr); return 0; } int main() { // 1. 固定写法device/stream初始化参考acl API手册 // 根据自己的实际device填写deviceId int32_t deviceId 0; aclrtStream stream; auto ret Init(deviceId, stream); // check根据自己的需要处理 CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(Init acl failed. ERROR: %d\n, ret); return ret); // 2. 构造输入与输出需要根据API的接口自定义构造 std::vectorint64_t inputShape {4, 2}; std::vectorint64_t targetShape {4, 2}; std::vectorint64_t weightShape {4, 2}; std::vectorint64_t posWeightShape {4, 2}; std::vectorint64_t outShape {4, 2}; void* inputDeviceAddr nullptr; void* targetDeviceAddr nullptr; void* weightDeviceAddr nullptr; void* posWeightDeviceAddr nullptr; void* outDeviceAddr nullptr; aclTensor* input nullptr; aclTensor* target nullptr; aclTensor* weight nullptr; aclTensor* posWeight nullptr; aclTensor* out nullptr; std::vectorfloat inputHostData {0.1, 0.1, 0.2, 0.2, 0.3, 0.3, 0.4, 0.4}; std::vectorfloat targetHostData {0.2, 0.2, 0.1, 0.1, 0.2, 0.2, 0.1, 0.1}; std::vectorfloat weightHostData {0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5}; std::vectorfloat posWeightHostData {0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5}; std::vectorfloat outHostData {0, 0, 0, 0, 0, 0, 0, 0}; // 创建input aclTensor ret CreateAclTensor(inputHostData, inputShape, inputDeviceAddr, aclDataType::ACL_FLOAT, input); CHECK_RET(ret ACL_SUCCESS, return ret); // 创建target aclTensor ret CreateAclTensor(targetHostData, targetShape, targetDeviceAddr, aclDataType::ACL_FLOAT, target); CHECK_RET(ret ACL_SUCCESS, return ret); // 创建weight aclTensor ret CreateAclTensor(weightHostData, weightShape, weightDeviceAddr, aclDataType::ACL_FLOAT, weight); CHECK_RET(ret ACL_SUCCESS, return ret); // 创建posWeight aclTensor ret CreateAclTensor(posWeightHostData, posWeightShape, posWeightDeviceAddr, aclDataType::ACL_FLOAT, posWeight); CHECK_RET(ret ACL_SUCCESS, return ret); // 创建out aclTensor ret CreateAclTensor(outHostData, outShape, outDeviceAddr, aclDataType::ACL_FLOAT, out); CHECK_RET(ret ACL_SUCCESS, return ret); int64_t reduction 0; uint64_t workspaceSize 0; aclOpExecutor* executor; // aclnnBinaryCrossEntropyWithLogits接口调用示例 // 3. 调用CANN算子库API需要修改为具体的API名称 // 调用aclnnBinaryCrossEntropyWithLogits第一段接口 ret aclnnBinaryCrossEntropyWithLogitsGetWorkspaceSize(input, target, weight, posWeight, reduction, out, workspaceSize, executor); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(aclnnBinaryCrossEntropyWithLogitsGetWorkspaceSize failed. ERROR: %d\n, ret); return ret); // 根据第一段接口计算出的workspaceSize申请device内存 void* workspaceAddr nullptr; if (workspaceSize 0) { ret aclrtMalloc(workspaceAddr, workspaceSize, ACL_MEM_MALLOC_HUGE_FIRST); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(allocate workspace failed. ERROR: %d\n, ret); return ret); } // 调用aclnnBinaryCrossEntropyWithLogits第二段接口 ret aclnnBinaryCrossEntropyWithLogits(workspaceAddr, workspaceSize, executor, stream); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(aclnnBinaryCrossEntropyWithLogits failed. ERROR: %d\n, ret); return ret); // 4. 固定写法同步等待任务执行结束 ret aclrtSynchronizeStream(stream); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(aclrtSynchronizeStream failed. ERROR: %d\n, ret); return ret); // 5. 获取输出的值将Device侧内存上的结果拷贝至Host侧需要根据具体API的接口定义修改 auto size GetShapeSize(outShape); std::vectorfloat resultData(size, 0); ret aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), outDeviceAddr, size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(copy result from device to host failed. ERROR: %d\n, ret); return ret); for (int64_t i 0; i size; i) { LOG_PRINT(result[%ld] is: %f\n, i, resultData[i]); } // 6. 释放aclTensor和aclScalar需要根据具体API的接口定义修改 aclDestroyTensor(input); aclDestroyTensor(target); aclDestroyTensor(weight); aclDestroyTensor(posWeight); aclDestroyTensor(out); // 7. 释放device资源需要根据具体API的接口定义修改 aclrtFree(inputDeviceAddr); aclrtFree(targetDeviceAddr); aclrtFree(weightDeviceAddr); aclrtFree(posWeightDeviceAddr); aclrtFree(outDeviceAddr); if (workspaceSize 0) { aclrtFree(workspaceAddr); } aclrtDestroyStream(stream); aclrtResetDevice(deviceId); aclFinalize(); return 0; }【免费下载链接】ops-nn本项目是CANN提供的神经网络类计算算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-nn创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关文章:

CANN/ops-nn二元交叉熵损失算子

aclnnBinaryCrossEntropyWithLogits 【免费下载链接】ops-nn 本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-nn 📄 查看源码 产品支持情况 产品是否支持Ascend 950PR/Ascend 950D…...

如何3步完成视频字幕提取:本地OCR工具的终极指南

如何3步完成视频字幕提取:本地OCR工具的终极指南 【免费下载链接】video-subtitle-extractor 视频硬字幕提取,生成srt文件。无需申请第三方API,本地实现文本识别。基于深度学习的视频字幕提取框架,包含字幕区域检测、字幕内容提取…...

Buzz 与 PSR 标准:如何实现完美兼容的 HTTP 客户端

Buzz 与 PSR 标准:如何实现完美兼容的 HTTP 客户端 【免费下载链接】Buzz PHPs lightweight HTTP client 项目地址: https://gitcode.com/gh_mirrors/buzz/Buzz Buzz 作为 PHP 的轻量级 HTTP 客户端,通过巧妙设计实现了与 PSR 标准的深度兼容&…...

如何高效配置开源工具:华硕笔记本性能管理的完整解决方案

如何高效配置开源工具:华硕笔记本性能管理的完整解决方案 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook,…...

CANN/asc-devkit asc_le函数文档

asc_le 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.com/can…...

Kohya Trainer 图像生成实战:利用训练好的模型进行高质量创作

Kohya Trainer 图像生成实战:利用训练好的模型进行高质量创作 【免费下载链接】kohya-trainer Adapted from https://note.com/kohya_ss/n/nbf7ce8d80f29 for easier cloning 项目地址: https://gitcode.com/gh_mirrors/ko/kohya-trainer Kohya Trainer 是一…...

ARM架构线程私有内存管理及TPMAX0_EL1寄存器详解

1. ARM架构线程私有内存管理概述在ARMv8/v9架构中,线程私有内存(Thread-Private Memory)是一种重要的内存保护机制。它允许操作系统为每个线程定义专属的内存区域,其他线程无法访问,从而提供硬件级别的内存隔离。这种机…...

Windows系统渗透利器:KitHack Winpayloads深度解析

Windows系统渗透利器:KitHack Winpayloads深度解析 【免费下载链接】KitHack Hacking tools pack & backdoors generator. 项目地址: https://gitcode.com/gh_mirrors/ki/KitHack KitHack是一款功能强大的渗透测试工具包,集成了多种黑客工具和…...

掌握显卡性能调优:NVIDIA Profile Inspector 7个实用技巧

掌握显卡性能调优:NVIDIA Profile Inspector 7个实用技巧 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector NVIDIA Profile Inspector是一款强大的显卡配置工具,能够深度修改NVIDI…...

Docker Maven Plugin 最佳实践:企业级Docker化部署的完整解决方案 [特殊字符]

Docker Maven Plugin 最佳实践:企业级Docker化部署的完整解决方案 🚀 【免费下载链接】docker-maven-plugin Maven plugin for running and creating Docker images 项目地址: https://gitcode.com/gh_mirrors/doc/docker-maven-plugin 想要快速实…...

Apache Atlas UI实战:从数据资产发现到血缘追溯的完整操作指南

1. Apache Atlas入门:数据治理的瑞士军刀 第一次接触Apache Atlas时,我正被公司混乱的数据资产搞得焦头烂额。报表数据频繁出错却找不到源头,新来的同事总在问"这个字段是什么意思",业务部门抱怨找不到他们需要的数据..…...

【2026前沿】LTX 2.3 深度实战:结合 Gemma 4完全体 打造电影级文生视频/图生视频全流程

一、 为什么 LTX 2.3 是 2026 年视频生成的“性价比之王”?LTX 2.3 在保留了上一代高速生成特性的基础上,在 VAE(变分自编码器) 进行了重构。相比于 LTX 2.0,它的核心优势在于:原生纵向支持:不再…...

XMem实战教程:从DAVIS到YouTubeVOS数据集的完整评估流程

XMem实战教程:从DAVIS到YouTubeVOS数据集的完整评估流程 【免费下载链接】XMem [ECCV 2022] XMem: Long-Term Video Object Segmentation with an Atkinson-Shiffrin Memory Model 项目地址: https://gitcode.com/gh_mirrors/xm/XMem 你是否正在寻找一个强大…...

高速ADC前端变压器相位不平衡分析与优化方案

1. 宽带A/D转换器前端设计中的变压器配置挑战在高速数据采集系统中,变压器作为A/D转换器的前端接口器件,承担着信号隔离和单端转差分的关键任务。然而,实际工程中我们常常遇到一个棘手的问题:当输入信号频率超过100MHz时&#xff…...

《【2026最新】DeepFaceLive 性能飞跃:TensorRT 加速环境配置全攻略(附避坑指南)》

随着数字人直播和实时换脸技术的普及,DeepFaceLive 已成为该领域的标杆。然而,实时推理对显卡的压力极大,许多小伙伴在追求高分辨率或高帧率时经常遇到掉帧。2026年,DeepFaceLive 的核心组件已全面适配 NVIDIA TensorRT。相比传统…...

深入Acid引擎架构:模块化设计与现代C++17的最佳实践指南

深入Acid引擎架构:模块化设计与现代C17的最佳实践指南 【免费下载链接】Acid A high speed C17 Vulkan game engine 项目地址: https://gitcode.com/gh_mirrors/ac/Acid Acid引擎是一个基于Vulkan API的高性能C17游戏引擎,采用先进的模块化架构设…...

webpack-starter 终极指南:如何快速使用 ESLint 和 Stylelint 提升前端代码质量

webpack-starter 终极指南:如何快速使用 ESLint 和 Stylelint 提升前端代码质量 【免费下载链接】webpack-starter ✨ A lightweight foundation for your next webpack based frontend project. 项目地址: https://gitcode.com/gh_mirrors/we/webpack-starter …...

GitHub中文化插件终极实战指南:5分钟实现高效中文开发体验

GitHub中文化插件终极实战指南:5分钟实现高效中文开发体验 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese GitHub作为全球…...

rCore-Tutorial-v3:从零开始用Rust编写RISC-V操作系统的终极指南

rCore-Tutorial-v3:从零开始用Rust编写RISC-V操作系统的终极指南 【免费下载链接】rCore-Tutorial-v3 Lets write an OS which can run on RISC-V in Rust from scratch! 项目地址: https://gitcode.com/gh_mirrors/rc/rCore-Tutorial-v3 你是否曾梦想过亲手…...

中国科学技术大学学位论文LaTeX模板ustcthesis:学术写作的终极解决方案

中国科学技术大学学位论文LaTeX模板ustcthesis:学术写作的终极解决方案 【免费下载链接】ustcthesis LaTeX template for USTC thesis 项目地址: https://gitcode.com/gh_mirrors/us/ustcthesis 中国科学技术大学学位论文LaTeX模板ustcthesis是专为中科大师生…...

Windows Cleaner:如何系统性地解决Windows磁盘空间管理难题

Windows Cleaner:如何系统性地解决Windows磁盘空间管理难题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows Cleaner是一款基于Python和PyQt5框…...

CANN/ge算子句柄创建API

aclopCreateHandle 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorF…...

Neoscroll.nvim与Telescope集成:实现搜索结果的流畅滚动

Neoscroll.nvim与Telescope集成:实现搜索结果的流畅滚动 【免费下载链接】neoscroll.nvim Smooth scrolling neovim plugin written in lua 项目地址: https://gitcode.com/gh_mirrors/ne/neoscroll.nvim Neoscroll.nvim是一款用Lua编写的Neovim平滑滚动插件…...

PacketStreamer传感器工作原理:深入解析BPF过滤机制

PacketStreamer传感器工作原理:深入解析BPF过滤机制 【免费下载链接】PacketStreamer :star: :star: Distributed tcpdump for cloud native environments :star: :star: 项目地址: https://gitcode.com/gh_mirrors/pa/PacketStreamer PacketStreamer是一款专…...

2026年精选5大小程序定制开发排行榜:赋能数字化转型新体验

导读:随着2026年企业数字化转型加速推进,小程序定制开发作为核心工具,正成为各行各业提升运营效率与用户互动的重要载体。本次深度测评聚焦当前市场中技术实力突出、服务能力全面的五家专业服务商,通过多维度剖析,为寻…...

AwesomeQRCode源码阅读笔记:深入理解二维码渲染核心技术

AwesomeQRCode源码阅读笔记:深入理解二维码渲染核心技术 【免费下载链接】AwesomeQRCode An awesome QR code generator for Android. 项目地址: https://gitcode.com/gh_mirrors/aw/AwesomeQRCode 想要为你的Android应用添加炫酷的二维码生成功能吗&#xf…...

system24主题开发实战:创建个性化配色方案的完整指南

system24主题开发实战:创建个性化配色方案的完整指南 【免费下载链接】system24 a tui-style discord theme 项目地址: https://gitcode.com/gh_mirrors/sy/system24 想要为Discord打造独特的视觉体验吗?system24主题开发为您提供了完美的起点&am…...

Stryker.NET在CI/CD中的应用:如何在DevOps流水线中集成变异测试

Stryker.NET在CI/CD中的应用:如何在DevOps流水线中集成变异测试 【免费下载链接】stryker-net Mutation testing for .NET core and .NET framework! 项目地址: https://gitcode.com/gh_mirrors/st/stryker-net Stryker.NET是一款强大的.NET变异测试工具&…...

121.YOLOv8从零到一实战,猫犬检测全流程,代码带注释,零基础也能学会

摘要 YOLO(You Only Look Once)是当前工业界和学术界最主流的目标检测算法之一,其核心优势在于将目标检测任务转化为单次回归问题,实现端到端的实时检测。本文从零基础出发,系统讲解YOLO的核心原理、模型架构演进,并基于Ultralytics框架提供完整的可运行代码案例,涵盖数…...

AI绘画工作流自动化:从NovelAI到Pixiv的Semi-Auto工具实战

1. 项目概述:从手动到自动,解放AI绘画生产力的桌面利器如果你和我一样,是个深度沉迷于AI绘画的创作者,那你一定经历过这样的痛苦:在NovelAI的WebUI里,吭哧吭哧地调好一组参数,生成一张图&#x…...