神经网络常见激活函数 5-PReLU函数
文章目录
- PReLU
- 函数+导函数
- 函数和导函数图像
- 优缺点
- pytorch中的PReLU函数
- tensorflow 中的PReLU函数
PReLU
- 参数化修正线性单元:Parametric ReLU
函数+导函数
-
PReLU函数
P R e L U = { x x > = 0 α x x < 0 ( α 是可训练参数 ) \rm PReLU = \left\{ \begin{array}{} x \quad & x>= 0 \\ \alpha x \quad & x<0 \end{array} \right. \quad (\alpha 是可训练参数) PReLU={xαxx>=0x<0(α是可训练参数)
其中,α 是一个可学习的参数,它在训练过程中被优化。 -
PReLU函数导数
d d x P R e L U = { 1 x ≥ 1 α x < 0 ( α 是可训练参数 ) \frac{d}{dx} \rm PReLU = \left\{ \begin{array}{} 1 \quad x \ge1 \\ \alpha \quad x < 0 \end{array} \right. \quad (\alpha 是可训练参数) dxdPReLU={1x≥1αx<0(α是可训练参数)
它和 ReLU 函数的不同之处在于,当 x 小于零时,PReLU 函数的导数值是可学习的参数 α,而不是固定的常数。这使得 PReLU 函数在负值区域的斜率可以自适应地调整。
函数和导函数图像
-
画图
下面是的优化完成 α = 0.5 \alpha = 0.5 α=0.5 后的情况,请注意, LeakyReLU 中 ,p 是固定值,一般设置为较小值,而 PReLU 中, α \alpha α 是可训练对象,在训练阶段是不断学习变化的。
import numpy as np from matplotlib import pyplot as plt# 定义 PReLU 函数 def prelu(x, alpha=0.25):return np.where(x < 0, alpha * x, x)# 定义 PReLU 的导数 def prelu_derivative(x, alpha=0.25):d = np.where(x < 0, alpha, 1)return d# 生成数据 x = np.linspace(-2, 2, 1000) alpha = 0.5 # 可以调整 alpha 的值 y = prelu(x, alpha) y1 = prelu_derivative(x, alpha)# 绘制图形 plt.figure(figsize=(12, 8)) ax = plt.gca() plt.plot(x, y, label='PReLU') plt.plot(x, y1, label='Derivative') plt.title(f'PReLU (alpha={alpha}) and Partial Derivative')# 设置上边和右边无边框 ax.spines['right'].set_color('none') ax.spines['top'].set_color('none')# 设置 x 坐标刻度数字或名称的位置 ax.xaxis.set_ticks_position('bottom')# 设置边框位置 ax.spines['bottom'].set_position(('data', 0)) ax.yaxis.set_ticks_position('left') ax.spines['left'].set_position(('data', 0))plt.legend(loc=2) plt.show()
优缺点
- PReLU函数相对于ReLU函数的改进
- 在负值域,PReLU的斜率较小,这也可以避免Dead ReLU问题。与ELU相比,PReLU在负值域是线性运算。尽管斜率很小,但不会趋于 0 。
- 公式与Leaky ReLu相似,但并不完全一样。 α \alpha α 可以是常数,或自适应调整的参数。也就是说,如果让 α \alpha α 自适应,那么PReLu会在反向传播时更新参数 。
- 参数 通常为 0 到 1 之间的数字,并且通常相对较小。
(1)如果 α \alpha α = 0,则 变为ReLU。
(2)如果 α \alpha α > 0,则 变为leaky ReLU。
(3)如果 α \alpha α 是可学习的参数,则 变为PReLU。
-
PReLU 的优点
- 参数可训练:PReLU具有可训练的参数alpha,它可以随着训练的进行而自动调整,从而使得模型能够更好地适应不同的数据集。
- 解决梯度消失问题:由于PReLU在输入小于0时梯度不为0,因此可以避免训练过程中的梯度消失问题。
- 增强模型表达能力:与ReLU函数相比,PReLU函数能够更好地处理负数输入,提升了模型的表达能力和学习能力。
- 提高模型的鲁棒性:PReLU函数的参数alpha能够根据数据自动调整,增强了模型对于噪声和异常值的鲁棒性。
- 良好的拟合能力:PReLU函数在负数输入时具有非线性特点,能够更好地拟合非线性的数据模式和任务。
- 平滑性:PReLU函数在整个定义域上都是光滑的,包括0点处。这种平滑性使得梯度计算更加稳定,有助于优化算法的训练过程。
-
PReLU 的缺点
- 计算复杂度增加:由于PReLU需要额外的参数alpha,因此其计算复杂度比ReLU略高。
- 参数选择敏感:alpha的值对模型的性能有很大影响,如果选择不当,可能会对模型的训练产生负面影响。
- 增加模型复杂度:PReLU引入了可学习的参数alpha,这会增加模型的复杂度和训练时间。
- 对异常值和噪声敏感:PReLU对异常值和噪声相对较为敏感,容易导致模型过拟合。
pytorch中的PReLU函数
-
代码
import torchf = torch.nn.PReLU(init=0.5) # 注意,alpha的初始值通过init设置,默认是0.25 x = torch.randn(2)prelu_x = f(x)print(f"x: \n{x}") print(f"prelu_x:\n{prelu_x}")"""输出""" x: tensor([-0.8802, 0.2288]) prelu_x: tensor([-0.4401, 0.2288], grad_fn=<PreluKernelBackward0>)注意,alpha的初始值通过init设置,默认是0.25,当前设置为0.5
tensorflow 中的PReLU函数
-
代码
python: 3.10.9
tensorflow: 2.18.0
import tensorflow as tf# 创建 PReLU 激活函数层 prelu = tf.keras.layers.PReLU(alpha_initializer=tf.initializers.constant(0.5))# 生成随机输入 x = tf.random.normal([2])# 应用 PReLU 激活函数 prelu_x = prelu(x)print(f"x: \n{x}") print(f"prelu_x:\n{prelu_x}")"""输出""" x: [-2.5138278 -0.34734365] prelu_x: [-1.2569139 -0.17367183]注意,alpha的初始值通过alpha_initializer设置,不可直接传入数值,需要使用
tf.initializers.constant(0.5)的这种方式,当前设置为0.5。
相关文章:
神经网络常见激活函数 5-PReLU函数
文章目录 PReLU函数导函数函数和导函数图像优缺点pytorch中的PReLU函数tensorflow 中的PReLU函数 PReLU 参数化修正线性单元:Parametric ReLU 函数导函数 PReLU函数 P R e L U { x x > 0 α x x < 0 ( α 是可训练参数 ) \rm PReLU \left\{ \begin{array}{} x \qua…...
2025我的第二次社招,写在春招之季
先说一个好消息,C那些事 4w star了! 前面断更了一个月,本篇文章就可以看到原因,哈哈。 大家好,我叫光城,腾讯实习转正做后端开发,后去小公司做数据库内核,经过这几年的成长与积累&am…...
Visual Studio Code中文出现黄色框子的解决办法
Visual Studio Code中文出现黄色框子的解决办法 一、vsCode中文出现黄色框子-如图二、解决办法 一、vsCode中文出现黄色框子-如图 二、解决办法 点击 “文件”点击 “首选项”点击 “设置” 搜索框直接搜索unicode选择“文本编辑器”,往下滑动,找到“Un…...
threejs开源代码之-旋转的彩色立方体
效果:旋转的彩色立方体 效果描述: 一个立方体在场景中旋转。立方体的每个面有不同的颜色。使用自定义着色器为立方体添加动态的光影效果。 代码实现 import * as THREE from three; import { OrbitControls } from three/examples/jsm/controls/OrbitC…...
visual studio 2008的试用版评估期已结束的解决办法
visual studio 2008试用期过了后,再次启动时提示:visual studio的试用版评估期已结束。 需要的工具:补丁文件PatchVS2008.exe 解决办法: 1.在“控制面板”-“添加删除程序”中选择visual studio 2008,点击“更改/卸载”…...
解锁 DeepSeek 模型高效部署密码:蓝耘平台深度剖析与实战应用
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
Http和Socks的区别?
HTTP 和 SOCKS 的区别 HTTP 和 SOCKS 都是用于网络通信的协议,但它们在工作原理、应用场景和实现方式上有显著的区别。以下是详细的对比和说明。 一、HTTP 协议 1. 定义 HTTP(HyperText Transfer Protocol)是用于传输超文本数据的应用层协…...
VC播放mp3的方法
1、使用msi库 #include <mmsystem.h> #pragma comment(lib,"winmm.lib") .......//打开文件MCI_OPEN_PARMS mciOpen; mciOpen.lpstrDeviceType _T("mpegvideo"); mciOpen.lpstrElementName _T("c://1.mp3"); MCIERROR mciError mci…...
Docker 部署 verdaccio 搭建 npm 私服
一、镜像获取 # 获取 verdaccio 镜像 docker pull verdaccio/verdaccio 二、修改配置文件 cd /wwwroot/opt/docker/verdaccio/conf vim config.yaml config.yaml 配置文件如下,可以根据自己的需要进行修改 # # This is the default configuration file. It all…...
49-拓展(1)
49-拓展(1) 扩展概述 扩展可以为在当前 package 可见的类型(除函数、元组、接口)添加新功能。 当不能破坏被扩展类型的封装性,但希望添加额外的功能时,可以使用扩展。 可以添加的功能包括: …...
国产编辑器EverEdit - 在文件中查找和替换
1 在文件中查找和替换 1.1 应用场景 某些场景,用户需要在所有工程文件中进行查找和替换关键词,比如:查找工程中哪些文件使用了某个常量。 1.2 使用方法 选择主菜单查找 -> 在文件中查找和替换,或使用快捷键Ctrl Shift F&a…...
安全行业大模型SecLLM技术白皮书
在ChatGPT 呈现全球现象级热度时,通用大语言模型(Large Language Model, LLM)技术成为了推动创新和变革的关键驱动力。但由于安全行业的特殊性和复杂性,LLM 并不能满足其应用需求。安全行业大模型(Security Large Language Model,…...
基础入门-HTTP数据包红蓝队研判自定义构造请求方法请求头修改状态码判断
知识点: 1、请求头&返回包-方法&头修改&状态码等 2、数据包分析-红队攻击工具&蓝队流量研判 3、数据包构造-Reqable自定义添加修改请求 一、演示案例-请求头&返回包-方法&头修改&状态码等 数据包 客户端请求Request 请求方法 …...
2025年日祭
本文将同步发表于洛谷(暂无法访问)、CSDN 与 Github 个人博客(暂未发布) 本蒟自2025.2.8开始半停课。 任务计划(站外题与专题) 数了一下,通过人数比较高的题,也就是我准备补的题&a…...
git命令行删除远程分支、删除远程提交日志
目录 1、从本地通过命令行删除远程git分支2、删除已 commit 并 push 的记录 1、从本地通过命令行删除远程git分支 git push origin --delete feature/feature_xxx 删除远程分支 feature/feature_xxx 2、删除已 commit 并 push 的记录 git reset --hard 7b5d01xxxxxxxxxx 恢复到…...
centOS8安装MySQL8设置开机自动启动失败
提供一个终极解决方案虽然systemctl 更符合管理预期但是不能用 使用一下命令 修改配置文件、修改mysql.service全是问题 systemctl start mysqld systemctl enable mysqld systemctl daemon-reload完全不生效各种报错 提示配置文件内容有问题 Main process exited, codeexite…...
对接DeepSeek
其实,整个对接过程很简单,就四步,获取key,找到接口文档,接口测试,代码对接。 获取 KEY https://platform.deepseek.com/transactions 直接付款就是了(现在官网暂停充值2025年2月7日࿰…...
SpringSecurity高级用法
SpringSecurity的高级用法,包括自定义loginUrl携带参数,自定义认证校验逻辑,自定义权限校验逻辑。 示例项目 https://github.com/qihaiyan/springcamp/tree/master/spring-advanced-security 一、概述 在项目实际开发过程中,Spr…...
NLP_[2]-认识文本预处理
文章目录 1 认识文本预处理1 文本预处理及其作用2. 文本预处理中包含的主要环节2.1 文本处理的基本方法2.2 文本张量表示方法2.3 文本语料的数据分析2.4 文本特征处理2.5数据增强方法2.6 重要说明 2 文本处理的基本方法1. 什么是分词2 什么是命名实体识别3 什么是词性标注 1 认…...
字符设备驱动开发
驱动就是获取外设、传感器数据和控制外设。数据会提交给应用程序。 Linux 驱动编译既要编写一个驱动,还要编写一个简单的测试应用程序。 而单片机下驱动和应用都是放在一个文件里,也就是杂在一块。而 Linux 则是分开了。 一、字符设备驱动开发流程 Lin…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
