Day 74:通用BP神经网络 (1. 集中管理激活函数)

代码:

package dl;/*** Activator.*/public class Activator {/*** Arc tan.*/public final char ARC_TAN = 'a';/*** Elu.*/public final char ELU = 'e';/*** Gelu.*/public final char GELU = 'g';/*** Hard logistic.*/public final char HARD_LOGISTIC = 'h';/*** Identity.*/public final char IDENTITY = 'i';/*** Leaky relu, also known as parametric relu.*/public final char LEAKY_RELU = 'l';/*** Relu.*/public final char RELU = 'r';/*** Soft sign.*/public final char SOFT_SIGN = 'o';/*** Sigmoid.*/public final char SIGMOID = 's';/*** Tanh.*/public final char TANH = 't';/*** Soft plus.*/public final char SOFT_PLUS = 'u';/*** Swish.*/public final char SWISH = 'w';/*** The activator.*/private char activator;/*** Alpha for elu.*/double alpha;/*** Beta for leaky relu.*/double beta;/*** Gamma for leaky relu.*/double gamma;/************************ The first constructor.** @param paraActivator*            The activator.**********************/public Activator(char paraActivator) {activator = paraActivator;}// Of the first constructor/************************ Setter.**********************/public void setActivator(char paraActivator) {activator = paraActivator;}// Of setActivator/************************ Getter.**********************/public char getActivator() {return activator;}// Of getActivator/************************ Setter.**********************/void setAlpha(double paraAlpha) {alpha = paraAlpha;}// Of setAlpha/************************ Setter.**********************/void setBeta(double paraBeta) {beta = paraBeta;}// Of setBeta/************************ Setter.**********************/void setGamma(double paraGamma) {gamma = paraGamma;}// Of setGamma/************************ Activate according to the activation function.**********************/public double activate(double paraValue) {double resultValue = 0;switch (activator) {case ARC_TAN:resultValue = Math.atan(paraValue);break;case ELU:if (paraValue >= 0) {resultValue = paraValue;} else {resultValue = alpha * (Math.exp(paraValue) - 1);} // Of ifbreak;// case GELU:// resultValue = ?;// break;// case HARD_LOGISTIC:// resultValue = ?;// break;case IDENTITY:resultValue = paraValue;break;case LEAKY_RELU:if (paraValue >= 0) {resultValue = paraValue;} else {resultValue = alpha * paraValue;} // Of ifbreak;case SOFT_SIGN:if (paraValue >= 0) {resultValue = paraValue / (1 + paraValue);} else {resultValue = paraValue / (1 - paraValue);} // Of ifbreak;case SOFT_PLUS:resultValue = Math.log(1 + Math.exp(paraValue));break;case RELU:if (paraValue >= 0) {resultValue = paraValue;} else {resultValue = 0;} // Of ifbreak;case SIGMOID:resultValue = 1 / (1 + Math.exp(-paraValue));break;case TANH:resultValue = 2 / (1 + Math.exp(-2 * paraValue)) - 1;break;// case SWISH:// resultValue = ?;// break;default:System.out.println("Unsupported activator: " + activator);System.exit(0);}// Of switchreturn resultValue;}// Of activate/************************ Derive according to the activation function. Some use x while others use* f(x).** @param paraValue*            The original value x.* @param paraActivatedValue*            f(x).**********************/public double derive(double paraValue, double paraActivatedValue) {double resultValue = 0;switch (activator) {case ARC_TAN:resultValue = 1 / (paraValue * paraValue + 1);break;case ELU:if (paraValue >= 0) {resultValue = 1;} else {resultValue = alpha * (Math.exp(paraValue) - 1) + alpha;} // Of ifbreak;// case GELU:// resultValue = ?;// break;// case HARD_LOGISTIC:// resultValue = ?;// break;case IDENTITY:resultValue = 1;break;case LEAKY_RELU:if (paraValue >= 0) {resultValue = 1;} else {resultValue = alpha;} // Of ifbreak;case SOFT_SIGN:if (paraValue >= 0) {resultValue = 1 / (1 + paraValue) / (1 + paraValue);} else {resultValue = 1 / (1 - paraValue) / (1 - paraValue);} // Of ifbreak;case SOFT_PLUS:resultValue = 1 / (1 + Math.exp(-paraValue));break;case RELU: // Updatedif (paraValue >= 0) {resultValue = 1;} else {resultValue = 0;} // Of ifbreak;case SIGMOID: // UpdatedresultValue = paraActivatedValue * (1 - paraActivatedValue);break;case TANH: // UpdatedresultValue = 1 - paraActivatedValue * paraActivatedValue;break;// case SWISH:// resultValue = ?;// break;default:System.out.println("Unsupported activator: " + activator);System.exit(0);}// Of switchreturn resultValue;}// Of derive/************************ Overrides the method claimed in Object.**********************/public String toString() {String resultString = "Activator with function '" + activator + "'";resultString += "\r\n alpha = " + alpha + ", beta = " + beta + ", gamma = " + gamma;return resultString;}// Of toString/*********************** Test the class.*********************/public static void main(String[] args) {Activator tempActivator = new Activator('s');double tempValue = 0.6;double tempNewValue;tempNewValue = tempActivator.activate(tempValue);System.out.println("After activation: " + tempNewValue);tempNewValue = tempActivator.derive(tempValue, tempNewValue);System.out.println("After derive: " + tempNewValue);}// Of main
}// Of class Activator

结果:

 

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

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

相关文章

Seata - 入门笔记

1、事务 访问并可能更新数据库中数据库中各种数据线的一个程序执行单元 原子性:事务是一个不可分割的工作单位,一个事务要么都做要么都不做 一致性:必须是使数据库从一个一致性到另一个一致性的状态,中间状态不能被观察到 隔离…

WebRTC | 音视频实时通信的本质

目录 一、音视频实时通信的两种指标 1. 实时通信延迟指标 2. 视频相关的基本概念 3. 音视频服务质量指标 二、解决实时通信的主要矛盾 1. 增加带宽 A. 提供更优质的接入服务 B. 保证云端网络的带宽和质量 C. 更合理的路由调度策略 2. 减少数据量 A. 采用更好的压缩算…

Metasploitable2靶机漏洞复现

一、信息收集 nmap扫描靶机信息 二、弱口令 1.系统弱口令 在Kali Linux中使用telnet远程连接靶机 输入账号密码msfadmin即可登录 2.MySQL弱口令 使用mysql -h 靶机IP地址即可连接 3.PostgreSQL弱密码登录 输入psql -h 192.168.110.134 -U postgres 密码为postgres 输入\…

10. Docker Swarm(一)

目录 1、前言 2、Docker Swarm体系架构 2.1、简单介绍 2.2、体系架构 3、简单使用 3.1、环境准备 3.2、初始化master节点 3.3、建立worker节点 3.4、查看集群的节点信息 3.5、部署应用 3.5.1、创建Dockerfile文件 3.5.2、构建镜像 3.5.3、将镜像上传到Docker仓库 …

web前端之JS

文章目录 介绍一、JS引入到文件1.1 嵌入到HTML文件中1.2 引入本地独立JS文件1.3 引入网络来源文件 二、JS的注释三、JS输出方式四、JS数据类型4.1 判断数据类型 typeof4.2 charAt返回指定位置的字符4.3 concat连接两个字符串4.4 substring从原字符串提取字符串并返回4.4 substr…

Vue输入框或者选择框无效,或者有延迟

问题剖析 使用Vue这种成熟好用的框架,一般出现奇奇怪怪的问题都是因为操作不当导致的,例如没有合理调用组件、组件位置不正确、没有合理定义组件或者变量、样式使用不当等等... 解决方案 如果你也出现了输入框输入东西,但是没有效果…

(二)结构型模式:1、适配器模式(Adapter Pattern)(C++实现示例)

目录 1、适配器模式(Adapter Pattern)含义 2、适配器模式应用场景 3、适配器模式的UML图学习 4、C实现适配器模式的示例 1、适配器模式(Adapter Pattern)含义 将一个接口转换为客户端所期待的接口,从而使两个接口…

最强自动化测试框架Playwright(11)- 录制视频

视频 使用playwright,您可以录制测试视频。 录制视频 视频在测试结束时在浏览器上下文关闭时保存。如果手动创建浏览器上下文,请确保等待 browser_context.close()。 context browser.new_context(record_video_dir"vid…

互联网医院办理|沈阳互联网医院|医疗行业新机遇

互联网医院的办理不仅能为人们带来更便利、高效的医疗服务,更能缓解医疗资源紧张的问题,推动医疗服务的质量和效率提升。在这个充满信息化和科技变革的时代,互联网医院无疑是医疗行业向前迈进的重要一步。 1、提供全天候的医疗服务&#xff1…

重复delete 对象指针后的 异常调用栈怪异 解析

Release版VC6 MFC程序 程序正常退出时得到一个如下异常调用栈:​ 0:000> kb# ChildEBP RetAddr Args to Child WARNING: Frame IP not in any known module. Following frames may be wrong. 00 0019eb94 76124f2f 00c3afc8 0019ebdc 001…

Electron+vue3项目使用SQLite3数据库

SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,我们不需要在系统中配置。 就像其他数据库,SQLite 引擎不是一个独立的进程&am…

ChatGPT应用在律师行业需谨慎,南非有律师被它的幻觉误导了!

ChatGPT自去年以来大受欢迎,没想到它这么快会出现在法庭上。 最近,南非约翰内斯堡地区法院审理一个案件时,有律师因为使用ChatGPT生成的虚假参考资料而受到指责。[1] 根据《星期日泰晤士报》的报道,法院判决认为,该名…