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

【使用 TensorFlow 2】02/3 使用 Lambda 层创建自定义激活函数

一、说明

        TensorFlow 2发布已经接近2年时间,不仅继承了Keras快速上手和易于使用的特性,同时还扩展了原有Keras所不支持的分布式训练的特性。3大设计原则:简化概念,海纳百川,构建生态.这是本系列的第三部分,我们将创建激活层并在 TensorFlow 2 中训练它们。
        之前我们已经了解了如何创建自定义损失函数 -使用 TensorFlow 2 创建自定义损失函数

自定义ReLU函数(来源:作者创建的图片)

二、介绍

        在本文中,我们将了解如何创建自定义激活函数。虽然 TensorFlow 已经包含一堆内置激活函数,但有多种方法可以创建您自己的自定义激活函数或编辑现有激活函数。

        ReLU(修正线性单元)仍然是任何神经网络架构的隐藏层中最常用的激活函数。ReLU 也可以表示为函数 f(x),其中,

        f(x) = 0, 当 x < 0 时,

        并且,当 x ≥ 0 时,f(x) = x。

        因此,该函数仅考虑正部分,并写为:

        f(x) = 最大值(0,x)

        或在代码表示中,

if input > 0:return input
else:return 0

        但这个ReLU函数是预定义的。如果我们想自定义此函数或创建我们自己的 ReLU 激活该怎么办?在 TensorFlow 中有一种非常简单的方法可以做到这一点——我们只需使用Lambda 层

ReLU 和 GeLU 激活函数

如何使用 lambda 层?

tf.keras.layers.Lambda(lambda x: tf.abs(x))

Lambda 只是可以在 TensorFlow 中直接调用的另一层。在 lambda 层中,首先指定参数。在上面的代码片段中,该值为“x”(lambda x)。在本例中,我们想要求 x 的绝对值,因此我们使用 tf.abs(x)。因此,如果 x 的值为 -1,则该 lambda 层会将 x 的值更改为 1。

如何使用 lambda 层创建自定义 ReLU?

def custom_relu(x):return K.maximum(0.0,x)
model = tf.keras.models.Sequential([tf.keras.layers.Flatten(input_shape=(128,128)),tf.keras.layers.Dense(512),tf.keras.layers.Lambda(custom_relu),tf.keras.layers.Dense(5, activation = 'softmax')
])

上面的代码片段展示了如何在 TensorFlow 模型中实现自定义 ReLU。我们创建一个函数 custom_relu 并返回 0 或 x 的最大值(与 ReLU 函数相同)。

在下面的顺序模型中,在 Dense 层之后,我们创建一个 Lambda 层并将其传递到自定义激活函数中。但这段代码仍然没有做任何与 ReLU 激活函数不同的事情。

当我们开始研究自定义函数的返回值时,乐趣就开始了。假设我们取 0.5 和 x 中的最大值,而不是 0 和 x。我们已经有了自己定制的 ReLU。然后可以根据需要更改这些值。

def custom_relu(x):
返回 K.maximum(0.5,x)

def custom_relu(x):return K.maximum(0.5,x)
model = tf.keras.models.Sequential([tf.keras.layers.Flatten(input_shape=(128,128)),tf.keras.layers.Dense(512),tf.keras.layers.Lambda(custom_relu),tf.keras.layers.Dense(5, activation = 'softmax')
])

在 mnist 数据集上使用 lambda 激活的示例

#using absolute value (Lambda layer example 1)
import tensorflow as tf
from tensorflow.keras import backend as K
mnist = tf.keras.datasets.mnist
(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
model = tf.keras.models.Sequential([tf.keras.layers.Flatten(input_shape=(28, 28)),tf.keras.layers.Dense(128),tf.keras.layers.Lambda(lambda x: tf.abs(x)), tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)

将 ReLU 激活替换为 mnist 数据集上的绝对值,测试精度为 97.384%。

#using custom ReLU activation (Lambda layer example 2)
import tensorflow as tf
from tensorflow.keras import backend as K
mnist = tf.keras.datasets.mnist
(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
def my_relu(x):return K.maximum(-0.1, x)
model = tf.keras.models.Sequential([tf.keras.layers.Flatten(input_shape=(28, 28)),tf.keras.layers.Dense(128),tf.keras.layers.Lambda(my_relu), tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)

        将 ReLU 激活替换为自定义 ReLU 激活,在 mnist 数据集上取最大值 -0.1 或 x,测试精度为 97.778%。

三、结论

        尽管 lambda 层使用起来非常简单,但它们有很多限制。在下一篇文章中,我将介绍如何在 TensorFlow 中创建可训练的完全自定义层。

相关文章:

【使用 TensorFlow 2】02/3 使用 Lambda 层创建自定义激活函数

一、说明 TensorFlow 2发布已经接近2年时间&#xff0c;不仅继承了Keras快速上手和易于使用的特性&#xff0c;同时还扩展了原有Keras所不支持的分布式训练的特性。3大设计原则&#xff1a;简化概念&#xff0c;海纳百川&#xff0c;构建生态.这是本系列的第三部分&#xff0c;…...

docker--使用docker login 报错解决方案

我们在本地使用 docker login 命令登录时报错&#xff0c;可以尝试一下先 docker logout 命令退出登录后&#xff0c;在使用 docker login命令进行登录操作&#xff1b; docker logout...

leetcode oj

150. 逆波兰表达式求值 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;定义一个名为 Solution 的类&#xff0c;并在其中定义了一个名为 evalRPN 的公共函数。这个函数接受一个由字符串组成的向量 tokens 作为输入&#xff0c;并返回一个整数。 在代码中&#xff0…...

黑马点评-05缓存穿透问题及其解决方案,缓存空字符串或使用布隆过滤器

缓存穿透问题(缓存空) 缓存穿透的解决方案 缓存穿透(数据穿透缓存直击数据库): 缓存穿透是指客户端请求访问缓存中和数据库中都不存在的数据,此时缓存永远不会生效并且用户的请求都会打到数据库 数据库能够承载的并发不如Redis这么高&#xff0c;如果大量的请求同时访问这种…...

Flink之窗口聚合算子

1.窗口聚合算子 在Flink中窗口聚合算子主要分类两类 滚动聚合算子(增量聚合)全窗口聚合算子(全量聚合) 1.1 滚动聚合算子 滚动聚合算子一次只处理一条数据,通过算子中的累加器对聚合结果进行更新,当窗口触发时再从累加器中取结果数据,一般使用算子如下: aggregatemaxmaxBy…...

K8S:Rancher管理 Kubernetes 集群

文章目录 一.Rancher 简介1.Rancher概念2.Rancher 和 k8s 的区别 二.Rancher 安装及配置1.安装 rancher2.登录 Rancher 平台3.Rancher 管理已存在的 k8s 集群4.Rancher 部署监控系统5.使用 Rancher 仪表盘管理 k8s 集群 三.拓展1.Rancher和kubesphere相比较2.K3S和K8S相比较 一…...

后台运行python程序并查看运行的python 进程

nohup python -u Job.py > log.log 2>&1 &说明&#xff1a; 末尾的“&”&#xff1a;表示后台运行程序 “nohup” &#xff1a;保证程序不被挂起 “python”&#xff1a;是执行python代码的命令 “-u”&#xff1a;表示不启用缓存&#xff0c;实时输出打印…...

树莓派部署.net core网站程序

1、发布你的项目 使用mobaxterm上传程序 回到mobaxterm,f进入目录输入&#xff1a; cd webpublish 运行程序&#xff1a;dotnet WebApplication1.dll 访问地址为&#xff1a;http://localhost:5000,尝访问如下&#xff1a; 已经出现 返回的json&#xff0c;证明是可以访问的…...

淘宝商品评论数据接口,淘宝商品评论API接口

淘宝商品评论数据接口可以通过淘宝开放平台API获取。 通过构建合理的请求URL&#xff0c;可以向淘宝服务器发起HTTP请求&#xff0c;获取商品评论数据。接口返回的数据一般为JSON格式&#xff0c;包含了商品的各种评价信息。获取到商品评论数据后&#xff0c;可以对其进行处理…...

455. 分发饼干

假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff0c;都有一个尺寸 s[j] …...

GEE:数据预处理的细节(处理顺序。比如, select() 和 filter() 要优先于 map())

作者:CSDN @ _养乐多_ 大家在数据预处理的时候,是不是随意进行处理,并没有考虑 Google Earth Engine(GEE)性能的问题?比如选择数据集的时候,先执行map函数,再按时间选择数据?不同的处理顺序会导致不同的计算成本。 因此,本文将探讨如何在 GEE 中筛选和选择数据集合…...

【AHK】任务栏调节音量/边缘滚动调节/边缘触发

通过ahk实现类似mouseinc的边缘滚动调节音量的功能&#xff0c;有两个思路。 任务栏调节音量 #If MouseIsOver("ahk_class Shell_TrayWnd") WheelUp::Send {Volume_Up} WheelDown::Send {Volume_Down} return #IfMouseIsOver(WinTitle) {MouseGetPos,,, Winreturn …...

Chrome插件 — ReRes

ReRes插件是一款可以帮助Web开发人员进行开发和测试的Chrome浏览器扩展。它可以模拟网页请求&#xff0c;并返回指定的响应。 该插件可以用于多种情况&#xff0c;例如&#xff1a; 测试网站功能&#xff0c;调试程序等&#xff1b;本地开发Web应用时&#xff0c;模拟远程API…...

前端面试基础面试题——9

1.js 延迟加载的方式有哪些&#xff1f; 2.js同步和异步的区别&#xff1f; 3.什么是浏览器的同源政策&#xff1f; 4.介绍一下 js 的节流与防抖&#xff1f; 5.js 中的深浅拷贝实现&#xff1f; 6.Js 动画与 CSS 动画区别及相应实现 7.观察者模式和发布订阅模式有什么不同…...

tomcat 问题

一、start up.bat 闪退 在命令窗口run 看看是缺少了哪个环境变量 二、控制台输出乱码 logging.properties 底部添加 java.util.logging.ConsoleHandler.encoding GBK 三、缓存不足 context.xml配置 <Resources cachingAllowed"false" cacheMaxSize"100…...

小程序首页如何进行装修设置

小程序首页是展示给用户的第一屏&#xff0c;它的装修直接影响到用户对小程序的第一印象。小程序首页的设置在小程序管理员后台->页面设置->首页&#xff0c;下图是小程序首页默认的设置。 下图&#xff0c;是小程序首页的具体表现形式。下面具体解释小程序首页各个设置项…...

npm安装依赖报错npm ERR! code ENOTFOUND npm ERR! errno ENOTFOUND、npm run dev报错记录

npm安装依赖报错npm ERR! code ENOTFOUND npm ERR! errno ENOTFOUND_得我所得&#xff0c;爱我所爱的博客-CSDN博客npm安装依赖报错今天在学习webpack的时候&#xff0c;在使用npm install来安装一个局部的webpack时候&#xff0c;报出一下错误:npm ERR! code ENOTFOUNDnpm ERR…...

堆叠注入([强网杯 2019]随便注1)

详解&#xff1a; 堆叠注入&#xff08;Stack Injection&#xff09;是一种计算机安全概念&#xff0c;涉及攻击者向程序的堆栈内存中插入恶意代码&#xff0c;以便在程序执行期间执行非预期的操作。 堆栈注入攻击通常利用程序在处理函数调用时使用的堆栈机制。当一个函数被调…...

零基础Linux_15(基础IO_文件)软硬链接+动静态库详解

目录 1. 软硬链接 1.1 创建软链接 1.2 创建硬链接 1.3 硬链接数和unlink 2. 动静态库 2.1 制作静态库 2.2 查看和打包静态库 2.3 使用静态库 2.3.1 安装在默认搜索路径 2.3.2 告知路径库路径库名 2.4 制作动态库 2.5 使用动态库 2.5.1 安装在默认搜索路径 2.5.2 …...

计算机毕业设计选什么题目好?springboot 健身房管理系统

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…...

基于Minicursor理念的Node.js后端服务快速搭建与架构解析

1. 项目概述与核心价值最近在折腾一个个人项目&#xff0c;需要快速搭建一个轻量级的、能处理实时数据流的后端服务。在寻找合适的脚手架时&#xff0c;我偶然在 GitHub 上发现了forrestchang/minicursor这个项目。乍一看名字&#xff0c;你可能会联想到数据库的“游标”&#…...

ARM Cortex-M调试陷阱:Flash断点残留如何导致Hard Fault

1. 项目概述&#xff1a;一次由断点引发的“血案”与深度剖析最近在支持一个基于NXP KW36&#xff08;Cortex-M0内核&#xff09;的BLE项目时&#xff0c;我遇到了一个极其隐蔽且令人抓狂的问题。同一批次的板子&#xff0c;烧录完全相同的固件&#xff0c;绝大多数运行正常&am…...

【最新版本】OpenClaw 2.7.5 一键安装部署完整教程(包含安装包)

OpenClaw 一键安装包&#xff5c;一键部署&#xff0c;告别复杂环境配置 适配系统&#xff1a;Windows10/11 64 位当前版本&#xff1a;v2.7.5&#xff08;虾壳云版&#xff09;核心优势&#xff1a;全程可视化操作&#xff0c;无需命令行、无需手动配置 Python/Node.js&#…...

酒吧数字化方案:Java德州扑克小酒馆扫码点餐预约系统源码

在消费升级与数字化转型的大背景下&#xff0c;中小型德州扑克小酒馆的运营模式正逐步从“人工主导”向“数字化赋能”转变。不同于传统酒吧&#xff0c;德州扑克小酒馆以“休闲娱乐餐饮服务”为核心&#xff0c;其运营痛点集中在点餐效率低、预约管理乱、桌台调度难、合规管控…...

抠图怎么抠出来?2026年最好用的免费AI抠图工具测评指南

你是否经常为了一张证件照、商品图或者头像而烦恼&#xff1f;想要快速去掉背景但又不想学复杂的PS操作&#xff1f;我今天要分享的&#xff0c;就是如何用现代AI抠图工具轻松搞定这一切。为什么抠图这么难&#xff1f;抠图之所以成为很多人的"老大难"&#xff0c;主…...

Claude Code Ultraplan 远程多代理规划全解析:AI Agent、CCR远程容器、异步规划、状态机、计划传送与企业级自动化治理

一、先说结论&#xff1a;Ultraplan 到底解决了什么痛点&#xff1f;Ultraplan 可以理解为一种“远程规划模式”&#xff1a;用户在本地终端发起一个复杂任务&#xff0c;系统把规划阶段卸载到远程 CCR 容器中执行。本地终端不再被长时间占住&#xff0c;远程端可以使用更强模型…...

创业团队如何利用多模型聚合平台优化产品开发流程

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 创业团队如何利用多模型聚合平台优化产品开发流程 对于小型创业团队而言&#xff0c;在快速迭代产品的过程中&#xff0c;大模型能…...

Composer依赖管理可视化:saketsarin/composer-web工具详解与实践指南

1. 项目概述&#xff1a;一个为Composer量身定制的Web管理界面如果你是一名PHP开发者&#xff0c;那么对Composer一定不会陌生。它是PHP生态的基石&#xff0c;一个强大的依赖管理工具&#xff0c;让我们能够通过一条简单的命令&#xff0c;将成千上万的第三方库引入到自己的项…...

SAP ECC6 2027年停服倒计时:中小企业主必看的4条务实出路与成本分析

SAP ECC6 2027年停服倒计时&#xff1a;中小企业主必看的4条务实出路与成本分析 当2027年的钟声敲响时&#xff0c;全球数十万家企业将面临一个关键抉择&#xff1a;是继续坚守已有二十年历史的SAP ECC6系统&#xff0c;还是踏上数字化转型的新征程&#xff1f;对于资源有限的中…...

K210数字识别数据集采集的两种实用方法:串口定时与按键触发,哪种更适合你的电赛项目?

K210数字识别数据集采集实战&#xff1a;串口定时与按键触发的深度对比与优化方案 在嵌入式AI与电赛项目中&#xff0c;数据采集的质量往往决定了模型识别的上限。K210作为边缘计算设备的性价比之选&#xff0c;其数据采集方案的合理性直接影响后续模型训练效果。本文将深入剖…...