python之matplotlib模組繪製常見的啟用函式及各啟用函式的優缺點

ckxllf發表於2019-10-07

  常見的啟用函式效果圖如下:

  程式碼區:

  #!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啟用函式一般被省略。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2658959/,如需轉載,請註明出處,否則將追究法律責任。

相關文章