1. 程式人生 > >啟用函式的生成及影象

啟用函式的生成及影象

所謂啟用函式(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