C++builder中的人工智能(18):神经网络中的SoftMax函数

在这篇文章中,我们将探讨SoftMax函数在神经网络中的作用,如何在人工神经网络(ANN)中使用SoftMax函数,以及在AI技术中SoftMax的应用场景。让我们来详细解释这些概念。

SoftMax函数是什么?

SoftMax函数是逻辑函数在多维情况下的推广,也被称为软argmax归一化指数函数。它在多项式逻辑回归中使用,并且常作为神经网络最后一个激活函数,用于将网络的输出归一化为概率分布。换句话说,SoftMax用于将预测输出向量转换为概率分布。SoftMax函数不作为激活函数使用,而是在所有输出从激活函数获得后,用于归一化这个向量(或数组)。换言之,SoftMax从给定的输出向量或数组中给出重要值。

SoftMax对激活输出的每个元素使用标准指数函数,每个值的输出在0和1之间。它通过将所有这些指数的和除以这些值来归一化,确保输出向量的分量之和为1。

SoftMax函数的作用是什么?

在神经网络中,SoftMax函数通常用于基于神经网络的分类器的最后一层。这类网络通常在对数损失或交叉熵方法下进行训练,这些方法是多项式逻辑回归的非线性变体。

对于一个有n个成员的x向量(或数组),每个成员的SoftMax可以写成如下,

这个函数可能会因为无限结果而溢出。为了避免这种情况,我们可以通过减去最大值m来调节x值。

如何在C++中编写SoftMax函数?

SoftMax函数可以在C++中如下编写:

static void softmax(double* input, double* output, unsigned int n) {double sum = 0;double m = -INFINITY;for (long int i = 0; i < n; i++) {m = std::max(m, input[i]);}for (unsigned int j = 0; j < n; j++) {sum += std::exp(input[j] - m);}for (unsigned int i = 0; i < n; i++) {output[i] = std::exp(input[i] - m) / sum;}
}

我们还可以使用偏移量来计算softmax,如下:

static void softmax2(double* input, double* output, size_t input_len) {assert(input);double m = -INFINITY;for (long int i = 0; i < input_len; i++) {if (input[i] > m) {m = input[i];}}double sum = 0.0;for (size_t i = 0; i < input_len; i++) {sum += expf(input[i] - m);}double offset = m + logf(sum);for (size_t i = 0; i < input_len; i++) {output[i] = expf(input[i] - offset);}
}

有没有一个简单的C++ SoftMax示例?

以下示例中使用了两个softmax()函数:

#include <iostream>
#include <assert.h>
#include <algorithm>
#include <math.h>static void softmax(double* input, double* output, unsigned int n) {double sum = 0;double m = -INFINITY;for (long int i = 0; i < n; i++) {m = std::max(m, input[i]);}for (unsigned int j = 0; j < n; j++) {sum += std::exp(input[j] - m);}for (unsigned int i = 0; i < n; i++) {output[i] = std::exp(input[i] - m) / sum;}
}static void softmax2(double* input, double* output, size_t input_len) {assert(input);double m = -INFINITY;for (long int i = 0; i < input_len; i++) {if (input[i] > m) {m = input[i];}}double sum = 0.0;for (size_t i = 0; i < input_len; i++) {sum += expf(input[i] - m);}double offset = m + logf(sum);for (size_t i = 0; i < input_len; i++) {output[i] = expf(input[i] - offset);}
}#define N 7int main() {double inp[] = {1.0, 2.0, 400.0, 4000.0, 1.0, 2.0, 3.0};double out[N];std::cout << "Inputs:\n";for (int i = 0; i < N; i++) {std::cout << inp[i] << ',';}std::cout << '\n';softmax(inp, out, N);double tot = 0;std::cout << "Softmax Output:\n";for (int i = 0; i < N; i++) {std::cout << out[i] << ',';tot += out[i];}std::cout << '\n';std::cout << "total of softmax output:" << tot << '\n';softmax2(inp, out, N);tot = 0;std::cout << "Softmax Output:\n";for (int i = 0; i < N; i++) {std::cout << out[i] << ',';tot += out[i];}std::cout << '\n';std::cout << "total of softmax output:" << tot << '\n';getchar();return 0;
}

这个示例展示了如何在C++中使用SoftMax函数来处理一个简单的输入数组,并输出归一化后的概率分布。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/10227.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习(七)——集成学习(个体与集成、Boosting、Bagging、随机森林RF、结合策略、多样性增强、多样性度量、Python源码)

目录 关于1 个体与集成2 Boosting3 Bagging与随机森林4 结合策略5 多样性X 案例代码X.1 分类任务-Adaboost-SVMX.1.1 源码X.1.2 数据集&#xff08;鸢尾花数据集&#xff09;X.1.3 模型效果 X.2 分类任务-随机森林RFX.2.1 源码X.2.2 数据集&#xff08;鸢尾花数据集&#xff09…

Matlab轻松烟雾检测

小编经验分享&#xff1a;如何使用Matlab进行烟雾检测 烟雾检测是一项重要的安全技术&#xff0c;它可以帮助我们及时发现火灾风险并采取相应的措施。在这篇文章中&#xff0c;小编将和大家分享如何使用Matlab进行烟雾检测的经验。希望这些经验对大家在实际应用中能够有所帮助…

c语言其实很简单----【数组】

TOC 1.输入10个学生成绩&#xff0c;计算及格人数&#xff0c;平均成绩&#xff0c;总成绩。 #include<stdio.h> int main(){float score[10];int i ,cut;float avar0.0,sum0.0;for(i0;i<10;i)scanf("%f",&score[i]);//输入10个学生的成绩cut0;for(i0…

在 .NET 6.0 中创建用于 CRUD 操作的 Web API

快速概述&#xff1a; 在动态的技术世界中&#xff0c;创建强大的 Web API 已成为开发人员不可或缺的关键技能。这些 API 是促进不同应用程序之间顺畅通信的重要链接&#xff0c;可实现无缝数据检索和操作。本文的重点是在 .NET 6 中为 CRUD 操作创建 Web API。 为了实现这一点…

lua 编译网路核心

下载 Severity Code Description Project File Line Suppression State Details Error LNK1104 cannot open file lua53.lib mime D:\MyWork\lua\luasocket-master\luasocket-master\LINK 1 2> Creating library Release\soc…

SystemC学习(4)— 在VCS中运行SystemC

SystemC学习&#xff08;4&#xff09;— 在VCS中运行SystemC 一、前言 参考&#xff1a;VCS编译verilog&SystemC 二、仅包含SystemC的仿真 源文件使用上一篇&#xff1a;SystemC学习&#xff08;3&#xff09;— APB_SRAM的建模与测试 编写makefile如下所示&#xff…

Qt第三课 ----------布局

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

MySQL本地安装及密码重置常见错误处理

文章目录 一、MySQL下载二、配置环境变量三、MySQL初始化1.初始化MySQL数据库2.安装MySQL服务3.启动MySQL服务 四、密码重置 一、MySQL下载 官网地址&#xff1a;https://dev.mysql.com/downloads/mysql/5.5.html#downloads 下载完成后&#xff0c;直接解压缩到D盘 二、配置…

TBB开启并行编程之旅

本文基于小彭老师TBB课程&#xff0c;并对部分晦涩知识添加了更详细的解释与示例 第0章&#xff1a;从并发到并行 停滞的摩尔定律 你醒啦&#xff1f;免费午餐结束了&#xff01; 摩尔定律具体内容我们就不再提&#xff0c;从上图可以看到晶体管的密度的确仍在指数增长&…

「QT」几何数据类 之 QPointF 浮点型点类

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「QT」QT5程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…

青藤深度参编的终端安全国家标准正式发布

近日&#xff0c;国家市场监督管理总局、国家标准化管理委员会发布中华人民共和国国家标准公告&#xff0c;由TC260&#xff08;全国网络安全标准化技术委员会&#xff09;归口&#xff0c;公安部第三研究所牵头的GB/T 29240-2024《网络安全技术 终端计算机通用安全技术规范》&…

[极客大挑战 2019]Secret File 1

[极客大挑战 2019]Secret File 1 审题 看到题目应该是一道简单的按照要求找flag的题目 知识点 跟着题目走 解题 一&#xff0c;查看源码 找到网站进入 点开发现 【注意它说没看清吗】 二&#xff0c;使用BP抓包试试 发现新出现了/action.php 抓到后放到Repeater中响应 得…

Day41 | 动态规划 :完全背包应用 完全平方数单词拆分(类比爬楼梯)

Day41 | 动态规划 &#xff1a;完全背包应用 完全平方数&&单词拆分&#xff08;类比爬楼梯&#xff09; 动态规划应该如何学习&#xff1f;-CSDN博客 01背包模板 | 学习总结-CSDN博客 完全背包模板总结-CSDN博客 难点&#xff1a; 代码都不难写&#xff0c;如何想…

ELK-Kibana配置

文章目录 一、什么是Kibana、有什么用&#xff1f;二、Kibana的安装与基本配置1. 下载Kibana安装包2. 解压安装包3. 修改Kibana配置文件4. 添加用户目录权限5. 启动Kibana6. 访问Kibana 三、Kibana的使用Index pattern的配置查看收集到的数据画图 一、什么是Kibana、有什么用&a…

kdump 应该怎么安装 linux-crashdump kdump-tools

sudo apt install linux-crashdump sudo apt install crash sudo apt install kdump-tools 1. 两个工具的关系 linux-crashdump kdump-tools 在 Ubuntu 上安装 kdump 功能&#xff0c;这两个包都是相关的&#xff0c;但有不同的作用. linux-crashdump 是一个元包&#xff08;…

pdf转excel;pdf中表格提取

一、问题描述 在工作中或多或少会遇到&#xff1a;需要将某份pdf中的表格数据提取出来&#xff0c;以便能够“修改使用”数据 可将pdf中的表格提取出来&#xff0c;解决办法还有点复杂 尤其涉及“pdf中表格不是标准的单元格”的时候&#xff0c;提取数据到excel不太容易 比…

ElasticSearch备考 -- 集群配置常见问题

一、集群开启xpack安全配置后无法启动 在配置文件中增加 xpack.security.enabled: true 后无法启动&#xff0c;日志中提示如下 Transport SSL must be enabled if security is enabled. Please set [xpack.security.transport.ssl.enabled] to [true] or disable security b…

qt配合映美精取图开发

最近开发一个项目&#xff0c;用映美精相机配合halcon做取图开发&#xff0c;由于网上资料小特意写个记录。到映美精官网下载驱动&#xff0c;映美精官网&#xff0c;下载映美精的工具开发包SDK 映美精的SDK下载SDK后找到classlib文件夹 里面就是SDK新建一个qt程序&#xff0c…

springboot yml文件数据源出现警告/报黄/数据库配置警告问题

1、看一下数据源的依赖是不是都引入完整了 2、看一下数据源是否有拼写错误 上图就是数据源拼写错误

手机上用什么方法可以切换ip

手机上用什么方法可以切换IP&#xff1f;在某些特定情境下&#xff0c;用户可能需要切换手机的IP地址&#xff0c;以满足网络安全、隐私保护或绕过地域限制等需求。下面以华为手机为例&#xff0c;将详细介绍手机IP地址切换的几种方法&#xff0c;帮助用户轻松实现这一目标。 一…