啟用函式的生成及影象
阿新 • • 發佈:2018-11-27
所謂啟用函式(Activation Function),就是在人工神經網路的神經元上執行的函式,負責將神經元的輸入對映到輸出端。
啟用函式(Activation functions)對於人工神經網路模型去學習、理解非常複雜和非線性的函式來說具有十分重要的作用。它們將非線性特性引入到我們的網路中。如下圖,在神經元中,輸入的 inputs 通過加權,求和後,還被作用了一個函式,這個函式就是啟用函式。引入啟用函式是為了增加神經網路模型的非線性。沒有啟用函式的每層都相當於矩陣相乘。就算你疊加了若干層之後,無非還是個矩陣相乘罷了。
常見的啟用函式有很多,如Sigmoid,Relu,Tanh,Softplus,下面我們通過程式碼生成的方式展示這些啟用函式:
# -*- coding: UTF-8 -*- import numpy as np import matplotlib.pyplot as plt import tensorflow as tf # 建立輸入資料 x = np.linspace(-7, 7, 180) # (-7, 7)之間的等間隔的180個點 # 經過TensorFlow的啟用函式處理的各個Y值 y_sigmoid = tf.nn.sigmoid(x) y_relu = tf.nn.relu(x) y_tanh = tf.nn.tanh(x) y_softplus = tf.nn.softplus(x) # 建立會話 sess = tf.Session() # 執行 y_sigmoid, y_relu, y_tanh, y_softplus = sess.run([y_sigmoid, y_relu, y_tanh, y_softplus]) # 建立各個啟用函式的影象 plt.subplot(221) plt.plot(x, y_sigmoid, c="red", label="Sigmoid") plt.ylim(-0.2, 1.2) plt.legend(loc="best") plt.subplot(222) plt.plot(x, y_relu, c="red", label="Relu") plt.ylim(-1, 6) plt.legend(loc="best") plt.subplot(223) plt.plot(x, y_tanh, c="red", label="Tanh") plt.ylim(-1.3, 1.3) plt.legend(loc="best") plt.subplot(224) plt.plot(x, y_softplus, c="red", label="Softplus") plt.ylim(-1, 6) plt.legend(loc="best") # 繪製並顯示影象 plt.show() # 關閉會話 sess.close()
啟用函式模組是需要通過tf.nn進行呼叫,nn是(neural network)
執行後我們可以看到其影象:
上圖是通過直接呼叫tf.nn來繪製的影象,當然我們也可以使用原始的數學方法進行生成,如下程式碼:
# 啟用函式的原始實現 def sigmoid(imputs): y = [1 / float(1 + np.exp(-x)) for x in inputs] return y def relu(inputs): y = [x * (x > 0) for x in inputs] return y def tanh(inputs): y = [(np.exp(x) - np.exp(-x)) / float(np.exp(x) + np.exp(-x)) for x in inputs] return y def softplus(inputs): y = [np.log(1 + np.exp(x)) for x in inputs] return y