【AI實戰】快速掌握TensorFlow(三):激勵函數

到如今咱們已經瞭解了TensorFlow的特色和基本操做(見文章:快速掌握TensorFlow(一)),以及TensorFlow計算圖、會話的操做(見文章:快速掌握TensorFlow(二)),接下來咱們將繼續學習掌握TensorFlow。python

本文主要是學習掌握TensorFlow的激勵函數算法

一、什麼是激勵函數
激勵函數是全部神經網絡算法的必備神器,經過加入激勵函數可實現張量計算的非線性化,從而提高神經網絡模型的泛化能力。
直接構建神經網絡的輸入與輸出是一個線性關係,以下圖
 
經過在神經網絡中加入非線性激勵函數後,神經網絡具備非線性處理的能力,可以實現對非線性數據的處理,以下圖
 
通俗地講,激勵函數的做用就是將多個線性輸入轉換爲非線性的關係。若是不使用激勵函數,神經網絡的每層都只是作線性變換,即便是多層輸入疊加後也仍是線性變換。經過使用激勵函數引入非線性因素後,使神經網絡的表示能力更強了。微信

經常使用的激勵函數主要有:ReLU、ReLU六、sigmoid、tanh、softsign、ELU等。
若是想要更加詳細地瞭解激勵函數,請見文章:深度學習中經常使用的激勵函數網絡

二、怎樣使用激勵函數
在TensorFlow中使用激勵函數很是方便,激勵函數位於神經網絡庫中(tensorflow.nn),下面介紹使用方法。
(0)建立一個會話,調用默認計算圖分佈式

import tensorflow as tf
sess = tf.Session()

(1)ReLU函數
ReLU(Rectifier linear unit,整流線性單元)是神經網絡中最經常使用的激勵函數,函數以下:
 
在TensorFlow中的調用方法以下:函數

df=tf.nn.relu([-5., 0., 5., 10.])
print(sess.run(df))

輸出結果爲:
[0.    0.    5.    10.]oop

(2)ReLU6函數
引入ReLU6主要是爲了抵消ReLU函數的線性增加部分,在ReLU的基礎上再加上min,函數以下:
 
在TensorFlow中的調用方法以下:學習

df=tf.nn.relu6([-5., 0., 5., 10.])
print(sess.run(df))

輸出結果爲:
[0.    0.    5.    6.]大數據

(3)Leaky ReLU函數
引入Leaky ReLU主要是爲了不梯度消失,當神經元處於非激活狀態時,容許一個非0的梯度存在,這樣不會出現梯度消失,收斂速度快。函數以下:
 
在TensorFlow中的調用方法以下:人工智能

df=tf.nn.leaky_relu([-3., 0., 5.])
print(sess.run(df))

輸出結果爲:
[-0.3    0.    5.]

(4)sigmoid函數
sigmoid函數是神經網絡中最經常使用的激勵函數,它也被稱爲邏輯函數,它在深度學習的訓練過程當中會致使梯度消失,所以在深度學習中不怎麼使用。函數以下:

在TensorFlow中的調用方法以下:

df=tf.nn.sigmoid([-1., 0., 1.])
print(sess.run(df))

輸出結果爲:
[0.26894143    0.5    0.7310586]

(5)tanh函數
tanh函數便是雙曲正切函數,tanh與sigmoid函數類似,但tanh的取值範圍是0到1,sigmoid函數取值範圍是-1到1。函數以下:
 
在TensorFlow中的調用方法以下:

df=tf.nn.tanh([-1., 0., 1.])
print(sess.run(df))

輸出結果爲:
[-0.76159418    0.    0.76159418]

(6)ELU函數
ELU在正值區間的值爲x自己,而在負值區間,ELU在輸入取較小值時具備軟飽和的特性,提高了對噪聲的魯棒性,函數以下:
 
在TensorFlow中的調用方法以下:

df=tf.nn.elu([-1., 0., 1.])
print(sess.run(df))

輸出結果爲:
[-0.63212055    0.    1.]

(7)softsign函數
softsign函數是符號函數的連續估計,定義以下:
 
在TensorFlow中的調用方法以下:

df=tf.nn.softsign([-1., 0., 1.])
print(sess.run(df))

輸出結果爲:
[-0.5    0.    0.5]

(8)softplus函數
softplus是ReLU激勵函數的平滑版,定義以下:
 
在TensorFlow中的調用方法以下:

df=tf.nn.softplus([-1., 0., 1.])
print(sess.run(df))

輸出結果爲:
[0.31326166    0.69314718    1.31326163]

至此,咱們已經瞭解了激勵函數的做用,以及經常使用的激勵函數原理和在TensorFlow中調用的方法。

接下來的「快速掌握TensorFlow」系列文章,還會有更多講解TensorFlow的精彩內容,敬請期待。

 

歡迎關注本人的微信公衆號「大數據與人工智能Lab」(BigdataAILab),獲取更多信息

 

推薦相關閱讀

相關文章
相關標籤/搜索