Matplotlib 健卫商大字 上机练习题 题自2: 深度学习中常用的激活函数包括SigmoidReLU和Tanh 请使用Matplotlib绘制这三个激活函数的曲线,要求: 1.横轴范围为[-5.5],步长为0.1. 2计算并绘制以下函数: Sigmoid:f(x)= ReLU: f(x)=max(0.x) Tanh: f() = tanh(z) 3.使用不同颜色和线型绘制三条曲线,并添加图例。 4设置标题为"ComparisonofActivation Functions"。 使用python完成并给出完整代码
接下来是三个函数的计算。Sigmoid函数是1/(1+exp(-x)),ReLU是max(0, x),Tanh是tanh(x)。这些函数在Python中可以用numpy来实现,比如用np.exp计算指数,np.maximum处理ReLU,np.tanh直接计算。
然后是关于绘图的部分。用户要求不同颜色和线型,以及图例。可能需要为每个函数指定不同的颜色和线条样式,比如Sigmoid用蓝色实线,ReLU用绿色虚线,Tanh用红色点划线。同时,添加图例的位置要合适,可能在右上角或者最佳位置。
标题需要设置为"Comparison of Activation Functions",可能要注意单词之间的空格,用户给的标题里没有空格,可能需要调整。还有坐标轴的标签,横轴是x,纵轴是f(x),可能需要添加网格线,让图表更清晰。
另外,检查用户给出的数据是否正确。比如,用户提到Tanh的函数是f()=tanh(z),这里可能有笔误,应该是f(x)=tanh(x)。需要确认是否正确处理了这个部分。
代码结构方面,先导入matplotlib和numpy,生成x的数据,计算三个函数的值,然后分别绘制三条曲线,设置样式,添加图例、标题、标签、网格,最后显示或保存图像。
可能需要注意的地方是ReLU函数的处理,是否在numpy中可以直接用np.maximum(0, x),这应该是可行的。另外,Sigmoid函数的计算是否会有溢出问题,不过范围在-5到5之间,应该没问题。
最后,检查代码是否存在语法错误,比如括号是否匹配,逗号是否正确,函数名是否正确。例如,plt.xlabel和plt.ylabel是否正确设置,标题是否有拼写错误,图例的label是否对应正确。
可能需要提醒用户如果无法显示图像的话,加上plt.show(),或者在Jupyter中使用%matplotlib inline。不过用户要求完整代码,应该已经包含这些部分。另外,是否调整了图像大小,比如figsize,让图表更清晰,但题目没有特别要求,可以自行决定。
总结步骤:导入库,生成x,计算三个函数,绘制曲线并设置样式,添加图表元素,显示图像。确保所有要求都被满足,包括横轴范围、颜色线型、图例、标题等。以下是用Python绘制激活函数对比图的完整代码及说明:
import numpy as np
import matplotlib.pyplot as plt
# 生成横轴数据
x = np.arange(-5, 5.1, 0.1) # 从-5到5,步长0.1
# 计算三个激活函数
sigmoid = 1 / (1 + np.exp(-x))
relu = np.maximum(0, x)
tanh = np.tanh(x)
# 创建画布
plt.figure(figsize=(10, 6))
# 绘制Sigmoid(蓝色实线)
plt.plot(x, sigmoid,
color='blue',
linestyle='-',
linewidth=2,
label='Sigmoid')
# 绘制ReLU(绿色虚线)
plt.plot(x, relu,
color='green',
linestyle='--',
linewidth=2,
label='ReLU')
# 绘制Tanh(红色点划线)
plt.plot(x, tanh,
color='red',
linestyle='-.',
linewidth=2,
label='Tanh')
# 添加图表元素
plt.title("Comparison of Activation Functions", fontsize=14, pad=15)
plt.xlabel("x", fontsize=12)
plt.ylabel("f(x)", fontsize=12)
plt.legend(loc='upper left') # 图例在左上角
plt.grid(True, linestyle=':', alpha=0.6) # 点线网格
# 设置坐标轴
plt.xlim(-5, 5) # 强制横轴范围
plt.ylim(-1.2, 1.2) # 统一纵轴范围方便对比
# 显示图表
plt.show()
代码解析:
数据生成:
- 使用
np.arange(-5, 5.1, 0.1)
精确生成[-5,5]区间数据 - 通过向量化运算同时处理整个数组
- 使用
函数计算:
- Sigmoid:
1 / (1 + np.exp(-x))
- ReLU:
np.maximum(0, x)
实现逐元素取最大值 - Tanh:直接调用
np.tanh()
函数
- Sigmoid:
可视化设计:
- 颜色方案:Sigmoid(蓝)/ReLU(绿)/Tanh(红)
- 线型区分:实线/虚线/点划线
- 设置统一纵轴范围(-1.2,1.2)便于对比
典型输出特征:
Sigmoid:
- 输出范围(0,1)
- S型曲线
- 中心点在(0,0.5)
ReLU:
- 负数区恒为0
- 正数区45度直线
- 在原点处转折
Tanh:
- 输出范围(-1,1)
- S型曲线
- 中心点在(0,0)
扩展建议:
- 添加子图对比:
plt.subplots(1,3)
- 标注函数公式:使用
plt.text()
- 可视化梯度变化:绘制导数曲线
- 添加交互功能:使用
mplcursors
库实现数据点提示
该可视化可帮助理解不同激活函数的非线性特性,为选择激活函数提供直观参考。
相关推荐
















