开源网站程序,做地产设计的公司,宠物网站 模板,企业宣传册范例文章目录 3、ReLU3.1 公式3.2 对应的图像3.3 对应的图像的代码3.4 优点与不足3.5 torch.relu()函数 3、ReLU
3.1 公式
ReLU函数的公式#xff1a; f ( x ) { x , x 0 0 , x 0 f(x) \begin{cases} x,x0 \\ 0,x0 \end{cases} f(x){x0,x… 文章目录 3、ReLU3.1 公式3.2 对应的图像3.3 对应的图像的代码3.4 优点与不足3.5 torch.relu()函数 3、ReLU
3.1 公式
ReLU函数的公式 f ( x ) { x , x 0 0 , x 0 f(x) \begin{cases} x,x0 \\ 0,x0 \end{cases} f(x){x0,x0,x0
ReLU函数的导函数 f ′ ( x ) { 1 , x 0 0 , x 0 f(x) \begin{cases} 1,x0 \\ 0,x0 \end{cases} f′(x){10,x0,x0
3.2 对应的图像 3.3 对应的图像的代码
import numpy as np
import matplotlib.pyplot as plt# 定义 x 的范围
x np.linspace(-10, 10, 1000)# 计算 ReLU 值
relu_values np.maximum(0, x)# 计算 ReLU 的导数
relu_derivative_values np.where(x 0, 1, 0)# 绘制 ReLU 函数
plt.plot(x, relu_values, labelReLU(x))# 绘制 ReLU 的导数
plt.step(x, relu_derivative_values, wherepost, labelDerivative of ReLU(x))# 设置图例
plt.legend()# 设置标题和轴标签
plt.title(ReLU Function and Its Derivative)
plt.xlabel(x)
plt.ylabel(y)# 显示网格
plt.grid(True)# 显示图形
plt.show()3.4 优点与不足
ReLU函数 1、ReLU 函数在正输入时是线性的收敛速度快计算速度快同时符合恒等性的特点。当输入为正时由于导数是1能够完整传递梯度不存在梯度消失的问题梯度饱和问题。 2、计算速度快。ReLU 函数中只存在线性关系且无论是函数还是其导数都不包含复杂的数学运算因此它的计算速度比 sigmoid 和 tanh 更快。 3、当输入大于0时梯度为1能够有效避免链式求导法则梯度相乘引起的梯度消失和梯度爆炸计算成本低。 4、它保留了 step 函数的生物学启发只有输入超出阈值时神经元才激活不过当输入为正的时候导数不为零从而允许基于梯度的学习尽管在 x0 的时候导数是未定义的。当输入为负值的时候ReLU 的学习速度可能会变得很慢甚至使神经元直接无效因为此时输入小于零而梯度为零从而其权重无法得到更新在剩下的训练过程中会一直保持静默。 ReLU不足 1、ReLU的输入值为负的时候输出始终为0其一阶导数也始终为0这样会导致神经元不能更新参数也就是神经元不学习了这种现象叫做“Dead Neuron”。为了解决ReLU函数这个缺点在ReLU函数的负半区间引入一个泄露Leaky值所以称为Leaky ReLU函数。 2、与Sigmoid一样其输出不是以0为中心的ReLU的输出为0或正数。 3、ReLU在小于0的时候梯度为零导致了某些神经元永远被抑制最终造成特征的学习不充分;这是典型的 Dead ReLU 问题所以需要改进随机初始化避免将过多的负数特征送入ReLU。
3.5 torch.relu()函数
在PyTorch中torch.relu 是一个常用的激活函数它实现了ReLU (Rectified Linear Unit) 及其导数的计算。ReLU函数对于输入的每个元素都执行以下操作
f(x) max(0, x)即如果输入值 x 是负数输出为0如果 x 是非负数输出就是 x 本身。
在PyTorch中torch.relu 不仅可以用来计算ReLU激活函数的值而且当反向传播时它会自动计算并应用ReLU的导数。ReLU的导数很简单
f(x) 1 if x 0 0 if x 0也就是说当输入值大于0时ReLU的导数是1当输入值小于或等于0时ReLU的导数是0。
以下是如何在PyTorch中使用 torch.relu 的示例
import torch# 创建一个张量
x torch.tensor([-1.0, 0.0, 1.0, 2.0])# 计算ReLU激活函数的值
y torch.relu(x)# 输出ReLU激活函数的值
print(y) # 输出: tensor([0., 0., 1., 2.])# 假设我们有一个关于y的梯度我们需要反向传播这个梯度到x
y.backward(torch.tensor([1.0, 1.0, 1.0, 1.0]))# 输出x的梯度即ReLU的导数
print(x.grad) # 输出: tensor([0., 0., 1., 1.])在这个例子中你可以看到当 x 的值为负时例如 -1.0 和 0.0对应的 x.grad即ReLU的导数是 0而当 x 的值为正时例如 1.0 和 2.0对应的 x.grad 是 1。这正好符合ReLU导数的定义。