1. 程式人生 > >玩玩機器學習4——TensorFlow基礎之啟用函式

玩玩機器學習4——TensorFlow基礎之啟用函式

       啟用函式(activation function)執行時啟用神經網路中某一部分神經元,將啟用資訊向後傳入下一層的神經網路。神經網路之所以能解決非線性問題(如語音、影象識別),本質上就是啟用函式加入了非線性因素,彌補了線性模型的表達力,把“啟用的神經元的特徵”通過函式保留並對映到下一層。

       因為神經網路的數學基礎是處處可微的,所以選取的啟用函式要能保證資料輸入與輸出也是可微的。那麼啟用函式在 TensorFlow 中是如何表達的呢?啟用函式不會更改輸入資料的維度,也就是輸入和輸出的維度是相同的。TensorFlow 中有如下啟用函式,它們定義在 tensorflow-1.1.0/tensorflow/python/ops/nn.py 檔案中,這裡包括平滑非線性的啟用函式,如 sigmoid、tanh、elu、softplus 和 softsign,也包括連續但不是處處可微的函式 relu、relu6、crelu 和 relu_x,以及隨機正則化函式 dropout

#4,啟用函式的使用
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf

# fake data
x = np.linspace(-5, 5, 200) #產生-5至5之間200個點
y_relu = tf.nn.relu(x)#定義relu啟用函式,輸入資料點
y_sigmoid = tf.nn.sigmoid(x)#定義sigmod啟用函式,輸入資料點
y_tanh = tf.nn.tanh(x)#定義tanh啟用函式,輸入資料點
y_softplus = tf.nn.softplus(x)#定義softplus,輸入資料點
sess = tf.Session()#建立session
y_relu, y_sigmoid, y_tanh, y_softplus = sess.run([y_relu, y_sigmoid, y_tanh, y_softplus])#生成啟用函式

#繪製relu的影象
plt.figure(1, figsize=(8, 6))
plt.subplot(221)
plt.plot(x, y_relu, c='red', label='relu')
plt.ylim((-1, 5))
plt.legend(loc='best')

#繪製sigmoid的影象
plt.subplot(222)
plt.plot(x, y_sigmoid, c='red', label='sigmoid')
plt.ylim((-0.2, 1.2))
plt.legend(loc='best')

#繪製tanh的影象
plt.subplot(223)
plt.plot(x, y_tanh, c='red', label='tanh')
plt.ylim((-1.2, 1.2))
plt.legend(loc='best')

#繪製softplus的影象
plt.subplot(224)
plt.plot(x, y_softplus, c='red', label='softplus')
plt.ylim((-0.2, 6))
plt.legend(loc='best')

plt.show()

輸出結果: