详解Keras3.0 Layer API: Activation functions(激活函数)

发布时间:2023年12月25日

1、常用激活函数

  • ReLU:ReLU函数是一种常见的激活函数,其计算公式为f(x) = max(0, x)。当输入值小于0时,输出值为0;当输入值大于等于0时,输出值等于输入值。ReLU函数在神经网络中常用于增加模型的非线性,提高模型的表达能力。
  • Sigmoid:Sigmoid函数是一种S型曲线的激活函数,其计算公式为f(x) = 1 / (1 + exp(-x))。Sigmoid函数可以将任意实数映射到0到1之间,常用于二分类问题的概率预测。
  • Softmax:Softmax函数是一种归一化指数函数,将一组数值转换为概率分布。其计算公式为f(x) = exp(x_i) / sum(exp(x_j)),其中x_i表示第i个元素的指数值,sum(exp(x_j))表示所有元素的指数值之和。Softmax函数可以将一组数值转换为概率分布,常用于多分类问题的概率预测。
  • Softplus:Softplus函数是一种平滑版本的ReLU函数,其计算公式为f(x) = log(1 + exp(x))。Softplus函数在ReLU函数的基础上增加了一个平滑项,可以缓解ReLU函数的梯度消失问题。
  • Softsign:Softsign函数是一种将输入值缩放到-1到1之间的函数,其计算公式为f(x) = x / (1 + abs(x))。Softsign函数可以将输入值映射到-1到1之间,常用于神经网络中的权重初始化。
  • Tanh:Tanh函数是一种双曲正切函数,其计算公式为f(x) = (e^x - e^-x) / (e^x + e^-x)。Tanh函数可以将输入值映射到-1到1之间,常用于神经网络中的激活函数。
  • SeLU:SeLU函数是一种改进版的ReLU函数,其计算公式为f(x) = scale * (max(0, x) + min(0, alpha * (exp(x) - 1))),其中alpha是一个可调整的参数。SeLU函数在ReLU函数的基础上增加了一个负数部分,可以缓解ReLU函数的梯度消失问题。
  • ELU:ELU函数是一种扩展版的ReLU函数,其计算公式为f(x) = scale * (max(0, x) + min(0, alpha * (exp(x) - 1))),其中alpha是一个可调整的参数。ELU函数在ReLU函数的基础上增加了一个负数部分,可以缓解ReLU函数的梯度消失问题。
  • Exponential:Exponential函数是一种指数函数,其计算公式为f(x) = exp(x)。Exponential函数可以将输入值映射到任意实数范围内。
  • Leaky_ReLU:Leaky_ReLU函数是一种带泄漏的ReLU函数,其计算公式为f(x) = max(alpha * x, x),其中alpha是一个可调整的参数。Leaky_ReLU函数在ReLU函数的基础上增加了一个负数部分,可以缓解ReLU函数的梯度消失问题。
  • ReLU6:ReLU6函数是一种限制输入值在0到6之间的ReLU函数,其计算公式为f(x) = min(max(0, x), 6)。ReLU6函数可以将输入值映射到0到6之间,常用于卷积神经网络中的激活函数。
  • SiLU:SiLU函数是一种平滑版本的Sigmoid函数,其计算公式为f(x) = x * sigmoid(x),其中sigmoid函数是Sigmoid函数的别名。SiLU函数可以将输入值映射到0到无穷大之间,常用于神经网络中的激活函数。
  • GeLU:GeLU函数是一种高斯误差线性单元(Gaussian Error Linear Unit)激活函数,其计算公式为f(x) = 0.5 * x * (1 + tanh(sqrt(2 / pi) * (x + 0.044715 * x^3))),其中tanh是双曲正切函数。GeLU函数可以将输入值映射到任意实数范围内,常用于神经网络中的激活函数。
  • Hard_Sigmoid:Hard_Sigmoid函数是一种分段线性函数,其计算公式为f(x) = max(0, min(1, 0.2x + 0.5))。Hard_Sigmoid函数可以将输入值映射到0到1之间,常用于神经网络中的激活函数。
  • Linear:Linear函数是一种恒等函数,即输入值等于输出值。Linear函数没有激活效果,常用于神经网络中的全连接层。
  • Mish:Mish函数是一种平滑版本的ReLU函数,其计算公式为f(x) = x * tanh(softplus(x)),其中softplus函数是Softplus函数的别名。Mish函数可以将输入值映射到0到无穷大之间,常用于神经网络中的激活函数。
  • Log_Softmax:Log_Softmax函数是一种对Softmax函数进行对数变换的函数,其计算公式为f(x) = log(softmax(x))。Log_Softmax函数可以将Softmax函数的输出值转换为概率分布,常用于多分类问题的损失计算。

2、激活函数实现?

import numpy as np

#ReLU function
def relu(x):
    return np.maximum(0, x)

#Sigmoid function
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

#Softmax function
def softmax(x):
    exp_x = np.exp(x)
    return exp_x / np.sum(exp_x)

#Softplus function
def softplus(x):
    return np.log(1 + np.exp(x))

#Softsign function
def softsign(x):
    return x / (1 + np.abs(x))

#Tanh function
def tanh(x):
    return np.tanh(x)

#SeLU function
def selu(x, alpha=1.0):
    return alpha * (np.maximum(0, x) + np.minimum(0, alpha * (np.exp(x) - 1)))

#ELU function
def elu(x, alpha=1.0):
    return alpha * (np.maximum(0, x) + np.minimum(0, alpha * (np.exp(x) - 1)))

#Exponential function
def exponential(x):
    return np.exp(x)

#Leaky_ReLU function
def leaky_relu(x, alpha=0.01):
    return np.maximum(alpha * x, x)

#ReLU6 function
def relu6(x):
    return np.minimum(np.maximum(0, x), 6)

#SiLU function
def silu(x):
    return x * sigmoid(x)

#GeLU function
def gelu(x):
    return 0.5 * x * (1 + np.tanh(np.sqrt(2 / np.pi) * (x + 0.044715 * x**3)))

#Hard_Sigmoid function
def hard_sigmoid(x):
    return np.clip((x + 0.5) / 2, 0, 1)

#Linear function
def linear(x):
    return x

#Mish function
def mish(x):
    return x * np.tanh(softplus(x))

#Log_Softmax function
def log_softmax(x):
    return np.log(softmax(x))

3、使用示例?

以ReLU为例

from keras.models import Sequential
from keras.layers import Dense, ReLU



#创建一个Sequential模型对象
model = Sequential()

#添加一个全连接层,该层的神经元数量为32,输入数据的形状为(784,)
model.add(Dense(32, input_shape=(784,)))

#添加一个ReLU激活函数层
model.add(ReLU())

#添加一个全连接层,该层的神经元数量为10
model.add(Dense(10))

文章来源:https://blog.csdn.net/lymake/article/details/135200641
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。