PyTorch学习笔记之激活函数篇(四)

news/2024/4/27 13:26:20

4、 Leaky ReLU 函数

4.1 公式

Leaky ReLU函数的公式:

f ( x ) = { x , x > = 0 λ x , x < 0 , λ ∈ ( 0 , 1 ) f(x) =\begin{cases} x&,x>=0 \\ \lambda x&,x<0,\lambda \in(0,1) \end{cases} f(x)={xλx,x>=0,x<0,λ(0,1)
Leakly ReLU函数的导函数:

f ′ ( x ) = { 1 , x > = 0 λ , x < 0 , λ ∈ ( 0 , 1 ) f'(x) = \begin{cases} 1&,x>=0 \\ \lambda &,x<0,\lambda \in(0,1) \end{cases} f(x)={1λ,x>=0,x<0,λ(0,1)

4.2 对应的图像

在这里插入图片描述

4.3 生成对应的图像代码

import numpy as np
import matplotlib.pyplot as plt# 定义LeakyReLU函数
def leaky_relu(x, alpha=0.01):return np.where(x >= 0, x, alpha * x)# 定义LeakyReLU的导数函数
def leaky_relu_derivative(x, alpha=0.01):return np.where(x >= 0, 1, alpha)# 生成x值的范围
x = np.linspace(-10, 10, 100)# 计算LeakyReLU函数值
y_leaky_relu = leaky_relu(x)# 计算LeakyReLU导数值
y_leaky_relu_derivative = leaky_relu_derivative(x)# 绘制LeakyReLU函数图像
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.plot(x, y_leaky_relu, label='LeakyReLU')
plt.title('LeakyReLU Function')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()# 绘制LeakyReLU导数图像
plt.subplot(1, 2, 2)
plt.plot(x, y_leaky_relu_derivative, label='LeakyReLU Derivative')
plt.title('LeakyReLU Derivative')
plt.xlabel('x')
plt.ylabel('dy/dx')
plt.legend()# 显示图像
plt.tight_layout()
plt.show()

4.4 优点与不足

Leaky ReLU函数(ReLU的改进):
1、与ReLU函数相比,把x的非常小的线性分量给予负输入(0.01x)来调整负值的零梯度问题;有助于扩大 ReLU 函数的范围,通常𝜆λ的值为 0.01 左右;函数范围是负无穷到正无穷。
2、LeakyRelu激活函数通过在负半轴添加一个小的正斜率(使得负轴的信息不会全部丢失)来解决ReLU激活函数的“死区”问题,该斜率参数𝜆λ是手动设置的超参数,一般设置为0.01。通过这种方式,LeakyRelu激活函数可以确保模型训练过程中神经元的权重在输入小于0的情况下依然会得到更新。
3、不会出

4.5 Leaky ReLU 函数

在PyTorch中,torch.leaky_relu 函数是用于实现 Leaky ReLU 激活函数的。Leaky ReLU 是一种改进的 ReLU(Rectified Linear Unit)函数,它允许小的非零梯度当输入值为负时。这有助于解决ReLU在负值区域的神经元“死亡”问题。

torch.leaky_relu 的基本使用如下:

import torch# 创建一个张量
x = torch.tensor([-5.0, -3.0, 0.0, 2.0, 5.0])# 应用 Leaky ReLU 函数
y = torch.leaky_relu(x, negative_slope=0.01)print(y)

这里,negative_slope 参数控制负值区域的斜率。默认值是 0.01,这意味着当输入值小于零时,输出将是输入值乘以 0.01。对于非负输入值,Leaky ReLU 的行为类似于普通的 ReLU 函数,即输出就是输入值本身。

如果你想要在一个神经网络模型中使用 Leaky ReLU,你可以在定义模型时将其作为激活函数使用,例如:

import torch.nn as nnclass MyModel(nn.Module):def __init__(self):super(MyModel, self).__init__()self.fc1 = nn.Linear(10, 50)self.leaky_relu = nn.LeakyReLU(negative_slope=0.01)self.fc2 = nn.Linear(50, 1)def forward(self, x):x = self.fc1(x)x = self.leaky_relu(x)x = self.fc2(x)return xmodel = MyModel()

在这个例子中,nn.LeakyReLU 被用作 MyModel 模型中的一个层,它将应用于全连接层 self.fc1 的输出。在模型的前向传播过程中,数据会首先通过全连接层,然后经过 Leaky ReLU 激活函数,最后再通过另一个全连接层。

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

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

相关文章

CrossOver 23 用户可以免费升级到 CrossOver24吗?CrossOver用户如何升级呢?

也就是上个月&#xff08;2024年2月底&#xff09;左右&#xff0c;CrossOver 刚刚更新了 24 版本&#xff0c;CrossOver更新的内容有哪些&#xff0c;大家可以参考这篇文章&#xff1a;CrossOver24.0新功能介绍&#xff0c;这篇文章详细介绍了CrossOver24有哪些新特点&#xf…

如何写好Stable Diffusion的prompt

Stable Diffusion是一种强大的文本到图像生成模型&#xff0c;其效果在很大程度上取决于输入的提示词&#xff08;Prompt&#xff09;。以下是一些关于如何编写有效的Stable Diffusion Prompt的秘诀&#xff1a; 明确描述&#xff1a;尽量清晰地描述你想要的图像内容。使用具体…

SpringBoot-04 | spring-boot-starter-logging原理原理

SpringBoot-04 | spring-boot-starter-logging原理原理 第一步&#xff1a;springboot加载factories文件第二步&#xff1a;构造监听器第三步&#xff1a;注册监听器到Spring中第四步&#xff1a;开始加载日志框架第五步&#xff1a;加载日志框架logback-spring.xml第六步&…

Wireshark 抓包工具与长ping工具pinginfoview使用,安装包

一、Wireshark使用 打开软件&#xff0c;选择以太网 1、时间设置时间显示格式 这个时间戳不易直观&#xff0c;我们修改 2、抓包使用的命令 1&#xff09;IP地址过滤 ip.addr192.168.1.114 //筛选出源IP或者目的IP地址是192.168.1.114的全部数据包。 ip.sr…

Java有哪些常用的集合?

1、典型回答 在 Java 中&#xff0c;常用的集合有以下几个&#xff1a; 列表(List)&#xff1a;有序集合&#xff0c;可以包含重复元素。常见实现类有 ArrayList、LinkedList、 Vector 等集合(Set)&#xff1a;无序集合&#xff0c;不允许包含重复元素。常见实现类有 HashSet、…

【Flask开发实战】防火墙配置文件解析(二)之shell读取内容

一、前言 上一篇文章中&#xff0c;介绍了防火墙配置文件包含的基本元素和格式样式&#xff0c;并模拟了几组有代表性的规则内容&#xff0c;作为基础测试数据。在拿到基础测试数据后&#xff0c;关于我们最终想解析成的数据是什么样式的&#xff0c;其实不难看出&#xff0c;…