C++builder中的人工智能(13):SELU激活函数在C++应用中的工作原理

SELU(Scaled Exponential Linear Unit)激活函数是一种在人工神经网络(ANN)中使用的高级激活函数。它是由Günter Klambauer, Thomas Unterthiner, Andreas Mayr在2017年提出的,旨在创建自归一化的神经网络(Self-Normalizing Neural Networks, SNNs)。这种网络能够自动将神经元激活值收敛到零均值和单位方差,而不需要显式的批量归一化处理。现在,让我们深入了解SELU激活函数,并探讨如何在C++应用中实现它。

激活函数在AI中的作用是什么?

激活函数(phi()),也称为转移函数或阈值函数,它决定了从给定值(sum)中得到的激活值(a = phi(sum))。这里的“sum”是输入信号的加权和,而激活函数则是根据这个和以及给定的条件或函数来计算一个新的激活值。换句话说,激活函数将所有加权信号的和转换为该信号的新激活值。常用的激活函数包括线性(恒等)、双极性和逻辑(sigmoid)函数等。

在C++中,你可以自定义激活函数。注意,这里的“sum”是净输入函数的结果,它计算所有加权信号的和。我们将使用这个结果作为输入函数的输出。人工神经元(输出值)的激活值可以通过激活函数如下表示:

目录

  1. 什么是SELU激活函数?
  2. 什么是缩放指数线性单元(SELU)?
  3. 一个简单的使用SELU的ANN示例

什么是SELU激活函数?

SELU激活函数是一种在人工神经网络中使用的激活函数。它是一种缩放版本的ELU,通过使用λ参数来实现。SELU是由Günter Klambauer, Thomas Unterthiner, Andreas Mayr在2017年提出的,他们在“Self-Normalizing Neural Networks”论文中介绍了自归一化神经网络(SNNs),这种网络能够自动将神经元激活值收敛到零均值和单位方差,而不需要显式的批量归一化。

SELU是ELU(Exponential Linear Unit)的扩展,通过引入λ参数来实现。SELU激活函数可以表示为:

根据研究,α和λ的值分别约为1.6733和1.0507。这些值使得SELU在处理输入时能够自动实现归一化,从而减少对显式归一化技术的依赖。

什么是缩放指数线性单元(SELU)?

SELU是ELU激活函数的缩放版本,通过乘以λ参数来实现。根据论文中的研究,他们解决了α和λ的值,并得到了α01 ≈ 1.6733和λ01 ≈ 1.0507的解,这里的下标01表示这些是固定点(0, 1)的参数。根据这个解释,每个节点可能有不同的α和λ参数。因此,我们可以在神经元结构中定义alfa和lambda参数,并如下计算SELU:

double phi(double sum) {return (sum > 0 ? lambda * sum : lambda * alpha * (std::exp(sum) - 1)); // SELU函数
}

一个简单的使用SELU的ANN示例

我们可以在Tneuron类中使用给定的SELU函数,如下所示:

#include <iostream>
#define NN 2   // 神经元数量
class Tneuron { // 神经元类
public:double a; // 每个神经元的活动double w[NN+1]; // 神经元之间连接的权重double alpha = 1.6733;double lambda = 1.0507;Tneuron() {a = 0;for (int i = 0; i <= NN; i++) w[i] = -1; // 如果权重是负数,则表示没有连接}// 定义输出神经元的激活函数(或阈值)double phi(double sum) {return (sum > 0 ? lambda * sum : lambda * alpha * (std::exp(sum) - 1)); // SELU函数}
};Tneuron ne[NN+1]; // 神经元对象void fire(int nn) {float sum = 0;for (int j = 0; j <= NN; j++) {if (ne[j].w[nn] >= 0) sum += ne[j].a * ne[j].w[nn];}ne[nn].a = ne[nn].phi(sum);
}int main() {// 定义两个输入神经元(a0, a1)和一个输出神经元(a2)的活动ne[0].a = 0.0;ne[1].a = 1.0;ne[2].a = 0;// 定义来自两个输入神经元到输出神经元(0到2和1到2)的信号权重ne[0].w[2] = 0.6;ne[1].w[2] = 0.4;// 激发我们的人工神经元活动,输出将是fire(2);printf("%10.6f\n", ne[2].a);getchar();return 0;
}

这段代码展示了如何在C++中使用SELU激活函数来模拟一个简单的人工神经网络。通过这种方式,你可以构建更复杂的神经网络模型,并在C++应用中实现深度学习技术。 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(2024最新完整详细版)Docker部署MinIO

对象存储MinIO 对象存储是用于存储非结构化数据的数据存储架构&#xff0c;它将一个数据单元称为一个对象&#xff0c;每个对象都包含数据本身、元数据&#xff08;描述数据的信息&#xff09;和一个唯一标识符&#xff08;通常是一个URL地址&#xff09;。 MinIO是一个开源的对…

运用Agent搭建“狼人杀”游戏服务器端!

背景 从23年开年以来&#xff0c;大模型引爆了各行各业。去年比较出圈的是各类文生图的应用&#xff0c;比如Stable Diffusion。网上可以看到各类解释其背后的原理和应用的文章。另外一条平行线&#xff0c;则是文生文的场景。受限于当时LLM&#xff08;大语言模型&#xff09…

性能调优专题(6)之MVCC多版本并发控制

一、概述 Mysql在可重复读隔离级别下如果保证事务较高的隔离性,在上一个篇章有详细介绍,同样的sql语句在一个事务多次执行查询结果相同,就算其他事务对数据进行修改也不会影响到当前事务sql语句的查询结果。 这个隔离性就是靠MVCC(Multi-Version Concurrency Control)机制来…

2022 icpc杭州(F,D,A,C,K)

文章目录 [F. Da Mi Lao Shi Ai Kan De](https://codeforces.com/gym/104090/problem/F)[D. Money Game](https://codeforces.com/gym/104090/problem/D)[A. Modulo Ruins the Legend](https://codeforces.com/gym/104090/problem/A)[C. No Bug No Game](https://codeforces.co…

ArcGIS/QGIS按掩膜提取或栅格裁剪后栅格数据的值为什么变了?

问题描述&#xff1a; 现有一栅格数据&#xff0c;使用ArcGIS或者QGIS按照矢量边界进行按掩膜提取或者栅格裁剪以后&#xff0c;其值的范围发生了变化&#xff0c;如下&#xff1a; 可以看到&#xff0c;不论是按掩膜提取还是进行栅格裁剪后&#xff0c;其值的范围均与原来栅…

机器学习课程总结(个人向)

前言 通过看课件PPT整理的笔记&#xff0c;没有截图 由于大部分内容已经耳熟能详了&#xff0c;故记录比较简略&#xff0c;只记录了一些概念和需要记忆的地方。 里面有较多的个人观点&#xff0c;未必正确。如有错误&#xff0c;还请各位大佬指正 正文 绪论 机器学习的定…

后台管理系统窗体程序:文章管理 > 文章列表

目录 文章列表的的功能介绍&#xff1a; 1、进入页面 2、页面内的各种功能设计 &#xff08;1&#xff09;文章表格 &#xff08;2&#xff09;删除按钮 &#xff08;3&#xff09;编辑按钮 &#xff08;4&#xff09;发表文章按钮 &#xff08;5&#xff09;所有分类下拉框 &a…

【算法-插入排序】基础知识,代码示例和应用场景

插入排序是一种相对简单、直观的排序算法&#xff0c;有点类似打扑克牌时将一张张牌“插入”到合适位置的过程。虽然插入排序的效率不如高级排序算法&#xff0c;但它有自己独特的优点&#xff0c;尤其在小数据集或已部分有序的数据中表现出色。 什么是插入排序 插入排序是一种…

大数据学习10之Hive高级

1.Hive高级 将大的文件按照某一列属性进行GROUP BY 就是分区&#xff0c;只是默认开窗存储&#xff1b; 分区是按行&#xff0c;如一百行数据&#xff0c;按十位上的数字分区&#xff0c;则有十个分区&#xff0c;每个分区里有十行&#xff1b; 分桶是根据某个字段哈希对桶数取…

Me-LLaMA——用于医疗领域的新型开源大规模语言模型

摘要 大规模语言模型的出现是提高病人护理质量和临床操作效率的一个重大突破。大规模语言模型拥有数百亿个参数&#xff0c;通过海量文本数据训练而成&#xff0c;能够生成类似人类的反应并执行复杂的任务。这在改进临床文档、提高诊断准确性和管理病人护理方面显示出巨大的潜…

练习LabVIEW第四十四题

学习目标&#xff1a; 计算学生三门课(语文&#xff0c;数学&#xff0c;英语)的平均分&#xff0c;并根据平均分划分成绩等级。要求输出等级A,B,C,D,E。90分以上为A&#xff0c;80&#xff5e;89为B&#xff0c;70&#xff5e;79为C&#xff0c;60&#xff5e;69为D&#xff…

【系统架构】如何演变系统架构:从单体到微服务

引言 随着企业的发展&#xff0c;网站架构必须不断演变以应对日益增长的用户流量和复杂性需求。本文将详细探讨从单体架构到微服务架构的演变过程&#xff0c;尤其关注订单和支付服务的实现方式&#xff0c;帮助您打造一个高效、可扩展的在线平台。 步骤1&#xff1a;分离应用…

Flutter鸿蒙next 实现长按录音按钮及动画特效

在 Flutter 中实现长按录音按钮并且添加动画特效&#xff0c;是一个有趣且实用的功能。本文将通过实现一个具有动画效果的长按录音按钮&#xff0c;带领你一步步了解如何使用 Flutter 完成这个任务&#xff0c;并解释每一部分的实现。 一、功能需求 我们需要一个按钮&#xf…

layui 实现 城市联动

<div class"layuimini-container"><form id"app-form" class"layui-form layuimini-form"><div class"layui-form-item"><label class"layui-form-label">标题</label><div class"la…

SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能

文章目录 SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能一、引言二、JWT简介与组成1、JWT简介2、JWT的组成2.1、Header&#xff08;头部&#xff09;2.2、Payload&#xff08;载荷&#xff09;2.3、Signature&#xff08;签名&#xff09; 三、Spring Secur…

重建大师7.0 | 全新倾斜高斯泼溅OPGS技术,实景三维大规模城市三维场景的更逼真化表达

在刚刚结束的“AI智算、国产信创”2024秋季新品发布会上&#xff0c;大势智慧隆重发布了重建大师7.0、重建农场信创版、低空三维AI智算平台等覆盖实景三维数据生产体系全流程、推进实景三维国产化建设与低空应用的全新系列产品。 今天&#xff0c;重点为大家介绍一下重建大师7.…

华为 Atlas500 Euler 欧拉系统操作指南

华为 Atlas500 Euler 欧拉系统操作指南 ssh root连接 找到Atlas500的IP地址&#xff0c;如&#xff1a;192.168.1.166 账号/密码&#xff1a;admin/Huawei123 root/密码&#xff1a;Huawei123456 #直接使用root ssh连接 这里受限不让直接用root连接 ssh root192.168.1.116 #…

【MySQL 保姆级教学】深层理解索引及特性(重点)--下(12)

索引&#xff08;重点&#xff09; 1. 索引的作用2. 索引操作2.1 主键索引2.1.1 主键索引的特点2.1.2 创建主键索引 2.2 唯一键索引2.2.1 唯一键索引的特点2.2.2 唯一索引的创建 2.3 普通索引2.3.1 普通索引的特点2.3.2 普通索引的创建 2.4 全文索引2.4.1 全文索引的作用2.4.2 …

SettlementfactoryController

目录 1、 SettlementfactoryController 1.1、 查询结算明细信息 1.1.1、 //SYS_RecRepairItemDetail修理项目明细表 1.1.2、 //SYS_CollageDetai领料明细表 1.1.3、 //SYS_RecOtherCostDetail其他费用明细表 1.1.4、 //SYS_InsuranceDetail保险理赔明细表 1.1.5、…

ubuntu22.04 docker-compose安装postgresql数据库

在 Ubuntu 22.04 上使用 Docker Compose 来安装和运行 PostgreSQL 数据库的过程如下&#xff1a; 1. 创建 Docker Compose 文件 在项目文件夹中创建一个 docker-compose.yml 文件&#xff0c;以配置 PostgreSQL 数据库的服务。 mkdir postgres_docker cd postgres_docker to…