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))