1. 程式人生 > >【AI實戰】快速掌握TensorFlow(三):激勵函式

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

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

本文主要是學習掌握TensorFlow的激勵函式

1、什麼是激勵函式
激勵函式是所有神經網路演算法的必備神器,通過加入激勵函式可實現張量計算的非線性化,從而提升神經網路模型的泛化能力。
直接構建神經網路的輸入與輸出是一個線性關係,如下圖
 
通過在神經網路中加入非線性激勵函式後,神經網路具有非線性處理的能力,能夠實現對非線性資料的處理,如下圖

 
通俗地講,激勵函式的作用就是將多個線性輸入轉換為非線性的關係。如果不使用激勵函式,神經網路的每層都只是做線性變換,即使是多層輸入疊加後也還是線性變換。通過使用激勵函式引入非線性因素後,使神經網路的表示能力更強了。

常用的激勵函式主要有:ReLU、ReLU6、sigmoid、tanh、softsign、ELU等。
如果想要更加詳細地瞭解激勵函式,請見文章:深度學習中常用的激勵函式

2、怎樣使用激勵函式
在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.]

(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的精彩內容,敬請期待。

 

推薦相關閱讀