激活函数ReLU,Sigmoid,tanh,softmax性质讲解及使用matplotlib绘制

Sigmoid及tanh

sigmoid及tanh的函数图像较为相似,它们的公式如下

Sigmoid公式

\sigma(x) = \frac{1}{1 + e^{-x}}

tanh公式

\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}

Sigmoid及tanh性质解析

Sigmoid和tanh作为激活函数都可以有效完成非线性映射的功效,其中Sigmoid经常作为2分类的神经网络的输出层的激活函数,由于其非线性映射会将输出值转换到0-1的区间内.

但是Sigmoid和tanh也有一定的缺陷,在值偏离0较多的时候,这两者的导数会越发近似于0,也就会造成梯度连乘后梯度消失的现象

Sigmoid及tanh函数图像及导数绘制

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import torch
import torch.nn.functional as F

if __name__ == '__main__':
    device = torch.device('mps' if torch.backends.mps.
<think>好的,我现在需要帮助用户生成SigmoidTanhReLU和Leaky ReLU四个激活函数像。用户之前已经询问过SigmoidTanh像生成方法,现在又补充了ReLU和Leaky ReLU,并提供了相关引用内容。首先,我需要确认用户的具体需求,以及是否需要整合之前的代码和引用中的信息。 首先,用户在上一次的问题中已经得到了SigmoidTanh的代码示例,现在需要扩展至四个函数。用户提供的引用中提到了Leaky ReLU的实现代码和ReLU的说明,这可能对编写新的代码有帮助。我需要检查这些引用内容,确保代码的正确性,并考虑如何整合到当前的回答中。 接下来,我需要考虑如何组织代码,使得四个函数像能够清晰展示。用户可能希望将四个像放在同一张中进行比较,或者分别展示。根据引用中的代码示例,Leaky ReLUReLU的实现相对简单,可以结合之前的SigmoidTanh代码,生成一个综合的绘脚本。 然后,我需要确保代码的规范性和可读性,比如使用适当的变量名、添加注释、设置像标题、标签、例等。此外,需要注意像的布局,可能需要使用(subplots)来同时显示四个函数,或者分成两个子,每个子包含两个函数,以方便比较。 还要注意激活函数的特性,比如SigmoidTanh的输出范围,ReLU的负数部分处理,Leaky ReLU的alpha参数设置。根据引用中的信息,Leaky ReLU的alpha通常设置为0.01或0.3,用户提供的代码中使用了0.3,但常见的是0.01,需要确认是否需要调整。 另外,用户可能希望代码中包含函数的定义,以及如何生成数据点,绘制像。需要确保代码能够在用户的环境中运行,比如导入正确的库(numpy和matplotlib),并处理可能的错误。 还需要考虑是否需要展示导数曲线,但根据当前用户的问题,可能只需要函数像。不过引用中提到有绘制导数曲线的例子,但用户这次没有提到,所以暂时不需要包含。 最后,生成相关问题,这些问题应围绕激活函数的特性、比较、优缺点以及应用场景展开,帮助用户进一步理解这些函数的不同之处。 总结步骤: 1. 定义四个激活函数SigmoidTanhReLU、Leaky ReLU。 2. 生成x轴数据,通常范围在-5到5之间。 3. 计算每个函数的y值。 4. 使用matplotlib创建子,每个子绘制两个函数,或四个单独的子。 5. 设置表标题、标签、例、网格等,确保像清晰易读。 6. 调整布局,避免像重叠。 7. 提供代码注释和解析,解释关键步骤。 8. 根据引用内容,确保Leaky ReLU的实现正确,alpha参数适当。 9. 对比不同激活函数的特性,如输出范围、梯度问题等。 10. 生成相关问题,引导用户深入思考。 可能遇到的注意事项: - Leaky ReLU的alpha参数设置需要明确,用户提供的代码中用了0.3,但常见的是0.01,需要确认是否调整。 - 确保所有函数在绘使用不同的颜色和线型,以便区分。 - 检查代码是否存在语法错误,比如缩进、括号匹配等。 - 添加必要的注释,帮助用户理解代码逻辑。 - 确保像输出美观,坐标轴标签、标题正确。</think>### 使用Python绘制四种激活函数像 #### 实现代码 ```python import numpy as np import matplotlib.pyplot as plt # 定义激活函数 def sigmoid(x): return 1 / (1 + np.exp(-x)) def tanh(x): return np.tanh(x) def relu(x): return np.maximum(0, x) def leaky_relu(x, alpha=0.01): return np.where(x > 0, x, alpha * x) # 生成数据 x = np.linspace(-5, 5, 500) y_sigmoid = sigmoid(x) y_tanh = tanh(x) y_relu = relu(x) y_leaky = leaky_relu(x, alpha=0.1) # 设置alpha=0.1以增强可视化效果 # 绘制四合一对比 plt.figure(figsize=(12, 8)) plt.subplot(2, 2, 1) plt.plot(x, y_sigmoid, 'b-', linewidth=2) plt.title("Sigmoid: $\sigma(x) = \\frac{1}{1+e^{-x}}$") plt.grid(True, alpha=0.3) plt.ylim(-0.2, 1.2) plt.subplot(2, 2, 2) plt.plot(x, y_tanh, 'r--', linewidth=2) plt.title("Tanh: $\\tanh(x) = \\frac{e^x - e^{-x}}{e^x + e^{-x}}$") plt.grid(True, alpha=0.3) plt.ylim(-1.5, 1.5) plt.subplot(2, 2, 3) plt.plot(x, y_relu, 'g-.', linewidth=2) plt.title("ReLU: $f(x) = \\max(0, x)$") plt.grid(True, alpha=0.3) plt.ylim(-2, 5) plt.subplot(2, 2, 4) plt.plot(x, y_leaky, 'm:', linewidth=2) plt.title("Leaky ReLU: $f(x) = \\begin{cases}x & x>0 \\\\ \\alpha x & x \\leq 0\\end{cases}$") plt.grid(True, alpha=0.3) plt.ylim(-1, 5) plt.tight_layout() # 自动调整子间距 plt.show() ``` #### 关键特性对比 | 函数 | 输出范围 | 梯度消失问题 | 死亡神经元风险 | 计算速度 | |-----------|------------|--------|---------|------| | Sigmoid | (0,1) | 严重 | 无 | 慢 | | Tanh | (-1,1) | 中等 | 无 | 慢 | | ReLU | [0, +∞) | 无 | 有 | 快 | | Leaky ReLU| (-∞, +∞) | 无 | 降低 | 快 | #### 代码解析 1. **Leaky ReLU参数**:通过`alpha=0.1`增强负区间的可见性(实际应用中通常取0.01)[^1] 2. **子布局**:使用`plt.subplot(2,2,n)`创建2x2网格布局,显示四个函数的对比 3. **公式渲染**:在标题中直接使用LaTeX语法显示函数定义 4. **可视化优化**:通过不同线型(实线、虚线等)和颜色增强可读性 --- ### 相关问题 1. 为什么ReLU在隐藏层中比Sigmoid更常用? 2. Leaky ReLU的α参数如何影响模型性能? 3. 如何通过修改激活函数解决梯度消失问题? 4. Softmax函数Sigmoid在分类任务中的区别是什么?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值