东莞网站策划,网站建设ftp,球队积分排名,互动营销公司文章目录 LeakyReLU函数导函数函数和导函数图像优缺点pytorch中的LeakyReLU函数tensorflow 中的LeakyReLU函数 LeakyReLU
LeakyReLU#xff1a; Leaky Rectified Linear Unit
函数导函数 LeakyReLU函数 L e a k y R e L U { x x 0 p x x 0 p ∈ ( 0 , 1 ) \rm … 文章目录 LeakyReLU函数导函数函数和导函数图像优缺点pytorch中的LeakyReLU函数tensorflow 中的LeakyReLU函数 LeakyReLU
LeakyReLU Leaky Rectified Linear Unit
函数导函数 LeakyReLU函数 L e a k y R e L U { x x 0 p x x 0 p ∈ ( 0 , 1 ) \rm Leaky{ReLU} \left\{ \begin{array}{} x \quad x0 \\ px \quad x0 \end{array} \right. \quad p \in (0,1) LeakyReLU{xx0pxx0p∈(0,1) LeakyReLU函数导数 d d x L e a k y R e L U { 1 x ≥ 1 p x 0 p ∈ ( 0 , 1 ) \frac{d}{dx} \rm LeakyReLU \left\{ \begin{array}{} 1 \quad x \ge1 \\ p \quad x 0 \end{array} \right. \quad p \in (0,1) dxdLeakyReLU{1x≥1px0p∈(0,1) 它和 ReLU 函数的不同之处在于当 x 小于零时LeakyReLU 函数的导数值并不为 0而 是常数p 一般设置为某较小的数值如 0.01 或 0.02
函数和导函数图像 画图 下面是的 p 0.5 p0.5 p0.5 时候的情况请注意p 一般设置为较小值。 import numpy as np
from matplotlib import pyplot as plt# 定义 PReLU 函数
def prelu(x, alpha0.25):return np.where(x 0, alpha * x, x)# 定义 PReLU 的导数
def prelu_derivative(x, alpha0.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, labelPReLU)
plt.plot(x, y1, labelDerivative)
plt.title(fPReLU (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(loc2)
plt.show() LeakyReLU 函数有效的克服了 ReLU 函数的缺陷使用也比较广泛。
优缺点 Leaky Relu 的优点(相对 ReLU的改进) 与 ReLU 函数相比Leaky ReLU 通过在负半轴引入一个小的线性分量如 0.01x来调整负值的梯度问题这有助于扩大 ReLU 函数的范围通常斜率 p 的值为 0.01 左右函数范围是负无穷到正无穷。Leaky ReLU 激活函数通过在负半轴添加一个小的正斜率如 0.01使得负轴的信息不会全部丢失。通过这种方式Leaky ReLU 激活函数可以确保模型训练过程中神经元的权重在输入小于 0 的情况下依然会得到更新。不会出现 Dead ReLU 问题但关于输入函数 f(x)的部分仍然容易出现梯度爆炸的情况因此必要时可以搭配 Sigmoid 或 Tanh 使用。 Leaky Relu 的缺点 经典以及广泛使用的ReLU 激活函数的变体带泄露修正线性单元Leaky ReLU的输出对负值输入有很小的坡度。由于导数总是不为零这能减少静默神经元的出现允许基于梯度的学习虽然会很慢。从理论上讲Leaky ReLU 具有 ReLU 的所有优点而且 Dead ReLU 不会有任何问题但在实际应用中尚未完全证明 Leaky ReLU 总是比 ReLU 更好。
pytorch中的LeakyReLU函数 代码 import torchx torch.randn(2)
f torch.nn.LeakyReLU(negative_slope0.1) # negative_slope是个常数,即负值部分的斜率leakyRelu_x f(x)print(fx: \n{x})
print(fleakyRelu_x:\n{leakyRelu_x})输出
x:
tensor([-1.7098, 0.3351])
leakyRelu_x:
tensor([-0.1710, 0.3351])为了便于演示这里的 p设置成了0.1即代码中的negative_slope,我们可以看到输出当x小于0 的时候leakyRelu_x的结果被乘以0.1。
tensorflow 中的LeakyReLU函数 代码 python: 3.10.9 tensorflow: 2.18.0 import tensorflow as tfalpha 0.1 # 定义 LeakyReLU 函数alpha 是负值部分的斜率
f lambda x: tf.nn.leaky_relu(x, alphaalpha)x tf.random.normal([2])
leaky_relu_x f(x)print(fx: \n{x})
print(fleaky_relu_x:\n{leaky_relu_x})输出
x:
[-0.733668 0.06844683]
leaky_relu_x:
[-0.07336681 0.06844683]同上这里的 p设置成了0.1即代码中的alpha,我们可以看到输出当x小于0 的时候leakyRelu_x的结果被乘以0.1。