深度学习的四种激活函数

首先四种激活函数分别为:
(1)Sigmoid函数
(2)Tahn函数
(3)ReLu函数
(4)SoftMax函数

1.Sigmoid函数(该函数是将取值为(-∞,+∞)的数映射到(0,1)之间)
在这里插入图片描述
优点:在特征相差比较复杂或是相差不是特别打的效果比较好;
缺点:当z值非常大或着非常小时,sigmoid函数的导数将接近0.着会导致权重W的梯度将接近0,使得梯度更新十分缓慢,即梯度消失;
sigmoid函数可用在网络最后一层,作为输出层进行二分类,尽量不要使用在隐藏层。
代码如下:

import numpy as np
import matplotlib.pyplot as plt 
def sigmoid(z):
    return 1/(1+np.exp(-z))

nums=np.arange(-10,10,step=1)
fig,ax=plt.subplots(figsize=(12,8))
ax.plot(nums,sigmoid(nums),'r')
plt.title('sigmoid')
plt.show()

图像:
在这里插入图片描述

2.Tanh函数(该函数是将取值为(-∞,+∞)的数映射到(-1,1)之间)
在这里插入图片描述
优点:tanh函数在0附近很短一段区域内可看作线性的。由于tanh函数均值为0,因此弥补了sigmoid函数均值为0.5的缺点。
缺点:当z很大或很小时,导函数接近于0,会导致梯度很小,权重更新非常缓慢,即梯度消失问题。
代码如下:

import numpy as np
import matplotlib.pyplot as plt 
def tanh(x):
    return (np.exp(x)-np.exp(-x))/(np.exp(x)+np.exp(-x))
fig = plt.figure(figsize=(6, 4))
ax = fig.add_subplot(111)

x = np.linspace(-10, 10)
y = tanh(x)


ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')

ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data', 0))
ax.set_xticks([-10, -5, 0, 5, 10])
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))
ax.set_yticks([-1, -0.5, 0.5, 1])

plt.plot(x, y, label="Tanh", color="red")
plt.legend()
plt.show()

图像:
在这里插入图片描述

3.Relu函数(是一种分段线性函数,弥补了sigmoid函数以及tanh函数的梯度消失问题)
在这里插入图片描述
优点:
(1)在输入为正数的时候(对于大多数输入z空间来说),不存在梯度消失问题。
(2)计算速度快很多,Relu函数只有线性关系,不管是前向传播还是反向传播,都比sigmoid和tanh要快很多。(sigmoid和tanh要计算指数,计算速度会比较慢)。
缺点:当输入为负时,梯度为0,会产生梯度消失问题。
代码如下:

import numpy as np
import matplotlib.pyplot as plt 
def ReLU(x):
    return np.maximum(0,x)
fig = plt.figure(figsize=(6, 4))
ax = fig.add_subplot(111)

x = np.linspace(-10, 10)
y = ReLU(x)


ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')

ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data', 0))
ax.set_xticks([-10,10])
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))
ax.set_yticks([0, 10])

plt.plot(x, y, label="ReLU(x)", color="red")
plt.legend()
plt.show()

图像:
在这里插入图片描述

4.SotfMax函数(sotfmax用于多分类过程中,它将多个神经元的输出,映射到(0,1)区间内,可以堪称概率理解,从而进行多分类)
假设有一个数组,V, Vi表示V中的第i个元素,那么这个元素的softmax值就是
在这里插入图片描述
代码如下:

import numpy as np
def softmax(x):
    D = np.max(x)
    exp_x = np.exp(x-D)
    return exp_x / np.sum(exp_x)

图像:
在这里插入图片描述

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值