ncnn的softmax

【机器学习】tf.nn.softmax 1、概念 softmax是一个激活函数。 tf.nn.softmax( logits, # 输入:全连接层(往往是模型的最后一层)的值,一般代码中叫做logits axis = None, name = None dim = None ) 作用:softmax函数的作用就是归一化。 输入:全连接层(往往是模型的最后一层)的值,一般代码中叫做logits 输出:归一化的值,含义是属于该位置的概率,一般代码叫做probs,例如输出[0.4, 0.1, 0.2, 0.. 阅读详情

ncnn里面可以直接调用softmax函数,如下面

ncnn::Layer* softmax = ncnn::create_layer("Softmax");

ncnn::ParamDict pd;
pd.set(0, 1); // axis
pd.set(1, 1);
softmax->load_param(pd);

ncnn::Option opt;
opt.num_threads = 1;
opt.use_packing_layout = false;

softmax->create_pipeline(opt);

softmax->forward_inplace(pred, opt);
delete softmax;

主要处理过程在forward_inplace函数,
看下它的源码,这里看一维向量的情况
正常softmax公式为 exp(value_i) / sum(exp(value_i))

可能ncnn里面为了值更均匀,用了value = exp(value - max) (这里value被更新)
然后求sum, 再用每个更新后的value / sum

int Softmax::forward_inplace(Mat& bottom_top_blob, const Option& opt) const
{
    // value = expf( value - global max value )
    // sum all value
    // value = value / sum

    int dims = bottom_top_blob.dims;
    size_t elemsize = bottom_top_blob.elemsize;
    int positive_axis = axis < 0 ? dims + axis : axis;

    if (dims == 1) // positive_axis == 0
    {
        int w = bottom_top_blob.w;

        float* ptr = bottom_top_blob;

        float max = -FLT_MAX;
        for (int i = 0; i < w; i++)
        {
            max = std::max(max, ptr[i]);
        }

        float sum = 0.f;
        for (int i = 0; i < w; i++)
        {
            ptr[i] = expf(ptr[i] - max);
            sum += ptr[i];
        }

        for (int i = 0; i < w; i++)
        {
            ptr[i] /= sum;
        }
    }
  ...

验证一个1x16的向量

-0.910332, -0.126514, 0.419731, 1.550650, 4.828178, 7.582278, 5.889471, 3.399679, 2.319962, 1.346125, 0.744986, 0.158084, -0.525536, -3.267861, -4.301273, -3.085058

经过类似上面的源码模拟softmax之后结果为

0.000161, 0.000352, 0.000607, 0.001882, 0.049898, 0.783749, 0.144212, 0.011959, 0.004062, 0.001534, 0.000841, 0.000468, 0.000236, 0.000015, 0.000005, 0.000018

直接调用ncnn softmax的结果为

0.000161 0.000352 0.000607 0.001882 0.049898 0.783749 0.144212 0.011959 0.004062 0.001534 0.000841 0.000468 0.000236 0.000015 0.000005 0.000018
YOLOv11 NCNN安卓端部署实战:从模型优化到帧率提升 本文详细介绍了YOLOv11模型在安卓端的NCNN部署实战,涵盖模型优化、NCNN转换技巧及帧率提升策略。通过实战案例分享,帮助开发者解决部署中的常见问题,实现从42ms到36ms的推理速度优化,最终在骁龙865设备上稳定达到28-32FPS。特别强调了模型导出、内存优化和性能调优等关键环节。 阅读详情

相关推荐

保姆级教程:在Windows上把PP-OCRv3识别模型转成ncnn,我踩过的坑你别踩了

本文详细介绍了在Windows平台上将PP-OCRv3文本识别模型转换为ncnn格式的完整流程,包括环境配置、模型转换、常见问题解决及优化技巧。特别针对Reshape算子不兼容、Squeeze算子替代等关键问题提供解决方案,帮助开发者高效完成模型部署,适用于移动端和嵌入式设备的OCR应用场景。

weixin_30417487的博客 394

nn.softmax

nn.softmax用法记录

weixin_45186425的博客 3429

分类任务常用激活函数之nn.Softmax函数参数dim理解(Pytorch)

2)dim=1表示该操作将在输入张量的第1维进行计算,而此张量第1维长度为3,故计算实际是沿着第1维方向,将整个张量划分为2×4个切片,每个切片包含三个元素,并分别对每个切片进行softmax计算,使得这三个元素和为1.3)dim=2表示该操作将在输入张量的第2维进行计算,而此张量第2维长度为4,故计算实际是沿着第2维方向,将整个张量划分为2×3个切片,每个切片包含四个元素,并分别对每个切片进行softmax计算,使得这四个元素和为1.该函数使得输入中所有数值变为。.........

NorthSmile的博客 4602

Pytorch nn.Softmax(dim=?) 详解

有了这个d0,d1,d2,d3...的维度说明之后,我们可以去理解任意一个tensor的Softmax运算,万变不离其宗。

我有明珠一颗的博客 3510

38、静默活体检测测试及ncnn、mnn部署

基本思想:因为最近需要搞个Android端的活体检测,github了一下,git到小视科技公司的一个开源项目,听了大佬的介绍,因此测试了一下,效果还可以,于是进行了模型转换和ncnn、tnn、mnn部署 一、首先测试一下大佬们的开源框架 git clone https://github.com/minivision-ai/Silent-Face-Anti-Spoofing.git (1)、首先测试一下其提供的图片 测试结果 "C:\Program Files\Python36\pyth..

sxj731533730 5553

onnx2ncnn | onnx 转 ncnn 模型推理统计【实验报告】

文章目录对 onnx/models 下所有 onnx 进行 ncnn转换推理分类模型mobilenetv2-7.onnx 【转换报错】resnet152-v2-7.onnxsqueezenet1.0-9.onnxvgg19-caffe2-9.onnxbvlcalexnet-9.onnxgooglenet-9.onnxcaffenet-9.onnxrcnn-ilsvrc13-9.onnxdensenet-9.onnxinception-v1-9.onnxinception-v2-9.onnxshufflen

专注于AI领域前沿技术学习与分享:目标检测、图像修复、超分重建、AI工程化 1361

ncnn部署yolov8-Class

nihui有部署过yolov8clas的ncnn模型,仅1个Softmax输出。

m0_69115733的博客 398

基于mobilenet的ncnn代码实例详解

导读 上一篇文章我们使用Python基于mxnet框架实现了一个模型的预测,这篇文章我们使用C++基于ncnn来实现模型的预测 新建cpp文件 我们将之前ncnn_example项目ncnn_example.cpp里面的main函数改名为main1(不然后面编译时可能会报错),再重新添加一个cpp,点击项目下的源文件–>右键–>添加–>新建项 代码解析 导入头文件 我们需要先导入C++需要依赖的一些头文件,以及相关ncnn和OpenCV的头文件,如果想使用GPU需要依赖vulkan,在

修炼之路 1099

ncnn源码学习(十):添加layer

给ncnn的网络添加layer分为两种情况: 1.模型转换之后,某些layer没有转换成功: 如,shufflenetV2中,param文件只转换到了fc这一个layer: 这时需要添加一层softmax,可以先对param文件中转换成功的layer做推理,然后手动添加一个softmax层: ncnn::Extractor ex = shufflenetv2.create_...

sinat_31425585的博客 2616

NCNN 模型推理详解及实战

本文首先描述了 ncnn 推理框架的依赖库的知识,及相关 cpu 和内存硬件特性描述。最后结合 shufflenet sample 解析了,模型推理的全部流程,详解了 sample 代码的每个细节。

专注计算机视觉算法训练,算法优化部署以及SDK开发的知识分享。 1160

Android实时表情识别Demo搭建:CameraX与NCNN实战指南

在移动端AI应用中,实时表情识别是一项典型且实用的图像分类任务。开发者通常面临云端API与商业SDK在隐私、延迟和定制性上的权衡,而基于端侧推理的模型部署则提供了更灵活高效的解决方案。通过轻量级神经网络如MobileNetV2,配合NCNN推理框架,可在Android设备上实现低延迟、高帧率的本地推理。CameraX作为相机图像分析链路的核心组件,负责稳定获取每一帧画面,并与模型输入张量高效衔接。从YUV格式转换、旋转镜像到张量归一化,每一步都直接影响识别精度与实时性能。这类技术方案广泛适用于社交互动、情感

weixin_29188997的博客 303

crnn+bilstm+ctc转ncnn模型,并成功调用

ocr训练代码:crnn+bilstm+ctcl 腾讯ncnn工具 参考:nihuid的详细记录超轻量中文OCR LSTM模型ncnn实现 第一步 训练crnn模型,得到best.pth 第二步 import numpy as np import onnxruntime as rt import utils import onnx import params import models.crnn as net import torch.nn as nn import torch from PIL impor

whatsuo的博客 2052

Plot3d 网格数据格式

PLOT3D是一个计算机图形程序,旨在可视化计算流体力学的网格和解决方案。PLOT3D文件可以是ASCII, 也可是Fortran unformatted 或 C binary形式。PLOT3D文件分为网格文件(XYZ 文件), 空气动力学结果文件 (Q 文件)和通用结果文件(函数文件 + 函数名称文件)。网格文件中可加入所谓的IBlank参数。

weixin_62592231的博客 3720

PP-OCRv3 文本识别模型转ncnn模型

PP-OCRv3 转ncnn模型

我爱听音乐 3411

Qt快速读取Excel文件

网上很多读取方式都是如下形式,太慢了,打开文件+读取文件要6s以上,实在是受不了! QAxObject excel("Excel.Application"); excel.setProperty("Visible", false); QAxObject *work_books = excel.querySubObject("WorkBooks"); work_boo...

c+c++的博客 2万+

【实战】S7-PLCSIM Advanced V3.0 授权问题排查指南(Error Code:-30与LicenseNotFound深度解析)

本文深度解析S7-PLCSIM Advanced V3.0启动时遇到的Error Code:-30与LicenseNotFound报错问题。文章提供了一套系统性的排查指南,从检查WinPcap驱动兼容性、确保Automation License Manager服务运行,到正确安装浮动授权以及清理系统残留缓存,逐步解决授权链条中的各个环节故障,帮助用户彻底解决仿真环境启动失败的问题。

weixin_29185167的博客 720

开源项目介绍|ncnn-神经网络推理框架

2023腾讯犀牛鸟开源人才培养计划开源项目介绍扫码填写问卷报名,提交ncnn项目申请书加入开发实践与导师一起成长这一夏ncnn 项目介绍ncnn是一个为手机端极致优化的高性能神经网络前向计算框架。基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 APP,将 AI 带到你的指尖。ncnn 项目导师寄语倪辉,ncnn作者ncnn是业界知名的AI推理框架,社区支持很好,参...

腾讯开源 2238

零售-公司间关联交易退货STO的实现方式

零售-公司间关联交易采购 STO-退货 集团公司下经常会出现一家公司和另外一家公司的公司间的关联交易,如跨公司销售、总分公司之间采购,分公司之间的采购等业务;通常公司间采购会采取STO的模式来实现(根据业务模式可以将库存转储统一做成STO的模式,公司间STO、同公司工厂间、同工厂库存地点间 的STO SAP都是支持的); 公司间STO 正向A向B采购都很熟悉,公司间退货STO的其实也是比较普遍的业务现象,很多实施着也将其做成反向的STO(B向A采购),而不是退货STO(A向B,item 选择return的标

weixin_45518759的博客 2830

pnnx graphrewriter技术文章

比如我的模型里面写了一个 padding=1 的卷积,那可能我的推理库的卷积不支持有 padding,但是他支持一个单独的叫 pad2d 的算子,这时候模型转换过程中就会把 padding=1 的卷积,拆成两个步骤,先做 padding,然后再做一个没有 padding 的卷积,这个过程就是相当于有两个算子来实现了一个不支持的算子参数。可见这里的layer创建也是有优先级的,特定后端的加速实现如果存在,就创建特定实现的layer,如果没有特定实现,才创建最naive的layer实现。

weixin_42960017的博客 373

面经-2023-哲库Zeku-数字芯片设计

面经-2023-哲库Zeku-数字芯片设计

w0shishabi的博客 3906

HyperLynx(十五)多板仿真

在对话框的“Design file#1”下拉列表中选择“B00,Mainboard”,在其下方的“Reference designators”列表中选择元器件“J1”,然后在“Designfile#2”下拉列表中选择“BO1、RAM1”,在其下方的“Refer ence designators”列表中选择元器件“J1”,单击“Insert”按钮,为这两个元器件建立互连映射。在“Assign Models”对话框中,选择“B00 Motherboard”,将“U16.B12”设置为输出。

小幽余生不加糖 5060

移动端ncnn部署YOLOv11:从官方转换到实战排错

本文详细介绍了在移动端使用ncnn框架部署YOLOv11模型的完整流程,包括模型转换、关键问题解决和性能调优技巧。重点解决了输出张量形状不匹配和后处理逻辑差异等常见问题,并提供了移动端推理代码适配和内存优化的实用建议,帮助开发者高效完成目标检测模型的移动端部署。

weixin_33724046的博客 358

适航规章、标准,书籍资料下载汇总(增加DO-297 IMA)

从事IMA平台适航工作的朋友看过来,DO-297英文版PDF可以下载了!更新日志:2024-9-28:初版。2024-10-21:增加DO-330英文版PDF下载,后台回复关键词”330“获取下载链接。2024-10-30:增加DO-160G中文版(非机翻)和英文版PDF下载,后台回复关键词”160“获取下载链接。2024-11-10:增加DO-297英文版PDF下载,后台回复关键词”297“获取下载链接。以下是一些收集到的适航相关的资料,分享给大家。

qq_41854911的博客 1577

NCNN移动端部署:VibeThinker编写C++前向传播代码

通过C++在NCNN框架上实现VibeThinker-1.5B模型的前向传播与自回归生成,详解KV Cache优化、分词集成和移动端推理的关键技术细节,实现在手机端高效离线运行数学推理与编程辅助任务。

weixin_36289813的博客 699

微信小程序逆向实战:从HTTPS抓包到API接口全解构

方案原理优点缺点方案一:使用低版本微信+系统代理微信7.0以下版本未强制不走代理操作简单容易被封号,无法使用新版小程序方案二:Hook SSL层(Xposed/Frida)动态Hook Java的TrustManager或系统的SSLContext,绕过证书校验灵活可控需要Root/越狱,技术门槛高方案三:VPN转发抓包(PacketCapture)利用Android VPNService将所有流量转发到本地代理无需Root,兼容性好部分机型存在性能问题。

2201_76125261的博客 265

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

从启动程序到根文件系统的卡顿排查

在嵌入式 MCU 或轻量 NPU 板卡(如 ESP32-S3、RV1126 或 Cortex-M55)上部署 TensorFlow Lite Micro (TFLM) 或 NCNN 推理框架时,为了挤出极致的帧率并削减 Flash 占用,将模型从 FP32 动态量化为 INT8 是必经之路。然而,在一次边缘部署实验中,FP32 效果极佳的视觉分类模型,经 INT8 量化转换烧录到边缘板卡后,输出的 Tensor 结果居然全部变成了NaN或者是乱码离散值,识别准确率瞬间掉到了 0%。

qq_42431428的博客 4983

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

上一篇: leetcode 712. Minimum ASCII Delete Sum for Two Strings(字符串删除字母的ASCII码之和)
下一篇: leetcode 46. Permutations(排列)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值