一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第8天,点击查看活动详情。
前言
在卷积神经网络中,其基本结构由:卷积层 + 激活函数 + 池化层 这三层组成,我在这里就不讲解卷积层和池化层,通过绘制各自激活函数图像查看各种激活函数的特征。
Sigmoid
最为常见的激活函数要数Sigmoid函数了,其基本公式如下可见,例图如下:
def Sigmoid(x):
y = np.exp(x) / (np.exp(x) + 1)
return y
Tanh
Tanh函数计算公式如下,例图如下。
def Tanh(x):
y = (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))
# y = np.tanh(x)
return y
ReLU
函数计算公式如下,例图如下。
def ReLU(x):
y = np.where(x < 0, 0, x)
return y
LeakyReLU
函数计算公式如下,例图如下。
def LeakyReLU(x, a):
# LeakyReLU的a参数不可训练,人为指定。
y = np.where(x < 0, a * x, x)
return y
PReLU
函数计算公式如下,例图如下。
def PReLU(x, a):
# PReLU的a参数可训练
y = np.where(x < 0, a * x, x)
return y
ReLU6
函数计算公式如下,例图如下。
def ReLU6(x):
y = np.minimum(np.maximum(x, 0), 6)
return y
Swish
函数计算公式如下,例图如下。
def Swish(x, b):
y = x * (np.exp(b * x) / (np.exp(b * x) + 1))
return y
Mish
函数计算公式如下,例图如下。
def Mish(x):
# 这里的Mish已经经过e和ln的约运算
temp = 1 + np.exp(x)
y = x * ((temp * temp - 1) / (temp * temp + 1))
return y
Grad_Swish 和Grad_Mish
函数计算公式如下,例图如下。
def Grad_Swish(x, b):
y_grad = np.exp(b * x) / (1 + np.exp(b * x)) + x * (b * np.exp(b * x) / ((1 + np.exp(b * x)) * (1 + np.exp(b * x))))
return y_grad
def Grad_Mish(x):
temp = 1 + np.exp(x)
y_grad = (temp * temp - 1) / (temp * temp + 1) + x * (4 * temp * (temp - 1)) / (
(temp * temp + 1) * (temp * temp + 1))
return y_grad