玩玩機器學習4——TensorFlow基礎之啟用函式
阿新 • • 發佈:2018-12-11
啟用函式(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()
輸出結果: