网站的发展前景,做搜狗手机网站点击软,怎么样做免费的百度seo,seo擦边球网站文章目录 PReLU函数导函数函数和导函数图像优缺点pytorch中的PReLU函数tensorflow 中的PReLU函数 PReLU
参数化修正线性单元:Parametric ReLU
函数导函数 PReLU函数 P R e L U { x x 0 α x x 0 ( α 是可训练参数 ) \rm PReLU \left\{ \begin{array}{} x \qua… 文章目录 PReLU函数导函数函数和导函数图像优缺点pytorch中的PReLU函数tensorflow 中的PReLU函数 PReLU
参数化修正线性单元:Parametric ReLU
函数导函数 PReLU函数 P R e L U { x x 0 α x x 0 ( α 是可训练参数 ) \rm PReLU \left\{ \begin{array}{} x \quad x 0 \\ \alpha x \quad x0 \end{array} \right. \quad (\alpha 是可训练参数) PReLU{xαxx0x0(α是可训练参数) 其中α 是一个可学习的参数它在训练过程中被优化。 PReLU函数导数 d d x P R e L U { 1 x ≥ 1 α x 0 ( α 是可训练参数 ) \frac{d}{dx} \rm PReLU \left\{ \begin{array}{} 1 \quad x \ge1 \\ \alpha \quad x 0 \end{array} \right. \quad (\alpha 是可训练参数) dxdPReLU{1x≥1αx0(α是可训练参数) 它和 ReLU 函数的不同之处在于当 x 小于零时PReLU 函数的导数值是可学习的参数 α而不是固定的常数。这使得 PReLU 函数在负值区域的斜率可以自适应地调整。
函数和导函数图像 画图 下面是的优化完成 α 0.5 \alpha 0.5 α0.5 后的情况请注意 LeakyReLU 中 p 是固定值一般设置为较小值而 PReLU 中 α \alpha α 是可训练对象在训练阶段是不断学习变化的。 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()优缺点
PReLU函数相对于ReLU函数的改进 在负值域PReLU的斜率较小这也可以避免Dead ReLU问题。与ELU相比PReLU在负值域是线性运算。尽管斜率很小但不会趋于 0 。公式与Leaky ReLu相似但并不完全一样。 α \alpha α 可以是常数或自适应调整的参数。也就是说如果让 α \alpha α 自适应那么PReLu会在反向传播时更新参数 。参数 通常为 0 到 1 之间的数字并且通常相对较小。 1如果 α \alpha α 0则 变为ReLU。 2如果 α \alpha α 0则 变为leaky ReLU。 3如果 α \alpha α 是可学习的参数则 变为PReLU。 PReLU 的优点 参数可训练PReLU具有可训练的参数alpha它可以随着训练的进行而自动调整从而使得模型能够更好地适应不同的数据集。解决梯度消失问题由于PReLU在输入小于0时梯度不为0因此可以避免训练过程中的梯度消失问题。增强模型表达能力与ReLU函数相比PReLU函数能够更好地处理负数输入提升了模型的表达能力和学习能力。提高模型的鲁棒性PReLU函数的参数alpha能够根据数据自动调整增强了模型对于噪声和异常值的鲁棒性。良好的拟合能力PReLU函数在负数输入时具有非线性特点能够更好地拟合非线性的数据模式和任务。平滑性PReLU函数在整个定义域上都是光滑的包括0点处。这种平滑性使得梯度计算更加稳定有助于优化算法的训练过程。 PReLU 的缺点 计算复杂度增加由于PReLU需要额外的参数alpha因此其计算复杂度比ReLU略高。参数选择敏感alpha的值对模型的性能有很大影响如果选择不当可能会对模型的训练产生负面影响。增加模型复杂度PReLU引入了可学习的参数alpha这会增加模型的复杂度和训练时间。对异常值和噪声敏感PReLU对异常值和噪声相对较为敏感容易导致模型过拟合。 pytorch中的PReLU函数 代码 import torchf torch.nn.PReLU(init0.5) # 注意alpha的初始值通过init设置默认是0.25
x torch.randn(2)prelu_x f(x)print(fx: \n{x})
print(fprelu_x:\n{prelu_x})输出
x:
tensor([-0.8802, 0.2288])
prelu_x:
tensor([-0.4401, 0.2288], grad_fnPreluKernelBackward0) 注意alpha的初始值通过init设置默认是0.25,当前设置为0.5
tensorflow 中的PReLU函数 代码 python: 3.10.9 tensorflow: 2.18.0 import tensorflow as tf# 创建 PReLU 激活函数层
prelu tf.keras.layers.PReLU(alpha_initializertf.initializers.constant(0.5))# 生成随机输入
x tf.random.normal([2])# 应用 PReLU 激活函数
prelu_x prelu(x)print(fx: \n{x})
print(fprelu_x:\n{prelu_x})输出
x:
[-2.5138278 -0.34734365]
prelu_x:
[-1.2569139 -0.17367183]注意alpha的初始值通过alpha_initializer设置不可直接传入数值需要使用 tf.initializers.constant(0.5)的这种方式,当前设置为0.5。