神經網路的激活函式、并通過python實作
- what is 激活函式
- 激活函式的python實作
- python實作階躍函式
- python實作sigmoid函式
- python實作ReLU函式
- 激活函式的特點
what is 激活函式
感知機的網路結構如下:
左圖中,偏置b沒有被畫出來,如果要表示出b,可以像右圖那樣做,

用數學式來表示感知機:

上面這個數學式子可以被改寫:
我們表達的意義是:輸入信號的總和被h(x)轉換成輸出y,

像h(x)函式一樣,將輸入信號的總和轉換為輸出信號,這種函式一般被稱為激活函式,上面這個h(x)表示的激活函式稱為階躍函式,
表示激活函式計算程序的圖如下:

激活函式的python實作
python實作階躍函式
為了方便階躍函式的引數取Numpy陣列,用以下方式實作階躍函式,
對numpy陣列進行不等號運算后,陣列的各個元素都會進行不等號運算,生成一個布爾型陣列,
這個代碼里陣列中x大于0的元素轉換成True,小于等于0的元素轉換成False,由于階躍函式要輸出int型別的0或1,所以添加一個dtype=np.int32,
import numpy as np
import matplotlib.pylab as plt
def step_function(x):
return np.array(x > 0, dtype=np.int32)
if __name__ == '__main__':
X = np.arange(-5.0, 5.0, 0.1)
# 在-0.5到5.0范圍內,以0.1為單位生成Numpy陣列
# [-5.0,-4.9,...,4.9,5.0]
Y = step_function(X)
plt.plot(X, Y)
plt.ylim(-0.1, 1.1) # 指定圖中繪制的y軸的范圍
plt.show()

python實作sigmoid函式

下面定義的函式的引數x是Numpy陣列時,結果也能正確被計算,因為Numpy具有廣播功能,如果標量和Numpy陣列進行數值運算,那么這個標量將和Numpy陣列中的各個元素進行運算,
import numpy as np
import matplotlib.pylab as plt
def sigmoid(x):
return 1 / (1 + np.exp(-x))
if __name__ == '__main__':
X = np.arange(-5.0, 5.0, 0.1)
Y = sigmoid(X)
plt.plot(X, Y)
plt.ylim(-0.1, 1.1)
plt.show()

python實作ReLU函式

代碼中使用Nmupy的maximum函式,該函式會從輸入的數值中選擇較大的值進行輸出,
import numpy as np
import matplotlib.pylab as plt
def relu(x):
return np.maximum(0, x)
if __name__ == '__main__':
x = np.arange(-5.0, 5.0, 0.1)
y = relu(x)
plt.plot(x, y)
plt.ylim(-1.0, 5.5)
plt.show()

激活函式的特點
上面的激活函式無論是階躍、sigmoid還是ReLU,使用的都是非線性函式,如果使用線性函式,比如h(x)=ax作為激活函式,那么y(x) = h(h(h(x)))的運算對應3層神經網路,這個運算會進行y(x) = aaax的乘法運算,但是同樣的處理可以由y(x)=bx(b=aaa)這一次乘法運算表示,也還是相當于一層神經網路,也就是說,使用線性函式的話,加深神經網路的層數就沒有意義了,為了發揮疊加層的優勢,激活函式必須使用非線性函式,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/402636.html
標籤:AI
上一篇:多標簽學習之白話版
下一篇:K均值聚類演算法
