python之matplotlib模块绘制常见的激活函数及各激活函数的优缺点

常见的激活函数效果图如下:
python之matplotlib模块绘制常见的激活函数及各激活函数的优缺点_第1张图片
代码区:

#!E:\anaconda\python.exe
#  -*-coding:utf-8 -*-
"""
功能:绘制激活函数 常见的激活函数有sigmoid、tanh、ReLU、eru、leaky ReLU、softmax
时间:2019/10/6

"""
from matplotlib import pyplot as plt
import numpy as np

# 1.sigmoid函数的表达式:f(x) = 1/(1+e^-x)
x = np.linspace(-6,6,200)
def sigmoid(x):
    y = 1/(1+np.exp(-x))
    return y
# 2.tanh的函数表达式: f(x) = (e^x-e^-x)/(e^x+e-x)
def tanh(x):
    y = (np.exp(x) - np.exp(-x))/(np.exp(x) + np.exp(-x))
    return y
#3. ReLu 的函数表达式: f(x)=  当x<0  f(x)0   当x>=0 f(x) = x
def ReLU(x):
    y = []
    for i in x:
        if i >= 0:
            y.append(i)
        else:
            y.append(0)
    return y
    #return np.maximum(x,[0]*100)   #可以利用np中的maximum方法表示,也可以用上述方法
#4.elu 的函数表达式  f(x)   x>=0  f(x)=x   x<0  f(x) =a(e^x -1)
def elu(x,a):
    y = []
    for i in x:
        if i>=0:
            y.append(i)
        else:
            y.append(a*(np.exp(i)-1))
    return y
#5.leaky ReLU 的函数表达式  x>=0  f(x)=x   x<0  f(x) =0.01x
def LReLU(x):
    y = []
    for i in x:
        if i>=0:
            y.append(i)
        else:
            y.append(0.01*i)
    return y
# softmax激活函数   softmax的表达式为:输入信号的指数函数除以所有输入信号的指数和
def softmax(x):
    c = np.max(x)   #解决溢出问题
    exe_x = np.exp(x)
    exe_s = np.sum(exe_x)
    y = exe_x/exe_s
    return  y

plt.subplot(1,2,1)    #画子图
plt.plot(x,sigmoid(x),c="red",lw="2",label = "sigmiod")
plt.plot(x,tanh(x),c="blue",lw="2",label = "tanh")
plt.plot(x,softmax(x),c="yellow",lw="2",label = "softmax")
plt.gca().spines["bottom"].set_position(("data",0))    #将函数图像移动到x轴(0,0)
plt.gca().spines["left"].set_position(("data",0))       #将函数图形移动到y轴(0,0)
plt.xlabel("x轴",fontproperties="SimHei")
plt.ylabel("y轴",fontproperties="SimHei")
plt.title("激活函数",fontproperties="SimHei")
plt.legend(loc="best")

plt.subplot(1,2,2)
plt.plot(x,ReLU(x),c="blue",lw="2",label="ReLU")
plt.plot(x,elu(x,0.1),c="yellow",lw="2",label="elu")
plt.plot(x,LReLU(x),c="green",lw="2",label="LReLU")
plt.gca().spines["bottom"].set_position(("data",0))
plt.gca().spines["left"].set_position(("data",0))
plt.xlabel("x轴",fontproperties="SimHei")
plt.ylabel("y轴",fontproperties="SimHei")
plt.title("激活函数",fontproperties="SimHei")
plt.legend(loc="best")
plt.show()


**

sigmoid激活函数:

**
优点:1.输出[0,1]之间,利用前向传播
2.连续函数,方便求导
缺点:1.容易产生梯度消失。一般5层以内就会产生梯度消失的现象。
2.输出不是以零为中心
3.大量运算时相当耗时(由于是幂函数)
**

tanh激活函数:

**
优点:1.输出[-1,1]之间,利用前向传播
2.连续函数,方便求导
3.输出以零为中心
缺点:1.容易产生梯度消失。一般5层以内就会产生梯度消失的现象。
2.大量数据运算时相当耗时(由于是幂函数)
**

ReLU激活函数:

**
优点:1.解决了正区间梯度消失问题
2.易于计算
3.收敛速度快
缺点:1.输出不是以零为中心
2.某些神经元不能被激活,导致参数永远不能更新
**

Leaky ReLU激活函数:

**
优点:
1.解决了正区间梯度消失问题
2.易于计算
3.收敛速度快
4.解决了某些神经元不能被激活
缺点:输出不是以零为中心
**

elu激活函数:

**
优点:
1.解决了正区间梯度消失问题
2.易于计算
3.收敛速度快
4.解决了某些神经元不能被激活
5.输出的均值为0
缺点:输出不是以零为中心

softmax激活函数:

**
一般用在分类的输出层作为激活函数
优点:
1.输出在[0,1]之间,可以当初概率
缺点:
在实际问题中,由于幂运算需要时间,而且softmax不会影响各元素的大小,因此输出层的softmax激活函数一般被省略。

注:纸上得来终觉浅,绝知此事要躬行。

你可能感兴趣的:(python之matplotlib模块绘制常见的激活函数及各激活函数的优缺点)