神经网络的激活函数、并通过python实现激活函数
神經(jīng)網(wǎng)絡(luò)的激活函數(shù)、并通過python實現(xiàn)
- what is 激活函數(shù)
- 激活函數(shù)的python實現(xiàn)
- python實現(xiàn)階躍函數(shù)
- python實現(xiàn)sigmoid函數(shù)
- python實現(xiàn)ReLU函數(shù)
- 激活函數(shù)的特點
what is 激活函數(shù)
感知機(jī)的網(wǎng)絡(luò)結(jié)構(gòu)如下:
左圖中,偏置b沒有被畫出來,如果要表示出b,可以像右圖那樣做。
用數(shù)學(xué)式來表示感知機(jī):
上面這個數(shù)學(xué)式子可以被改寫:
我們表達(dá)的意義是:輸入信號的總和被h(x)轉(zhuǎn)換成輸出y。
像h(x)函數(shù)一樣,將輸入信號的總和轉(zhuǎn)換為輸出信號,這種函數(shù)一般被稱為激活函數(shù)。上面這個h(x)表示的激活函數(shù)稱為階躍函數(shù)。
表示激活函數(shù)計算過程的圖如下:
激活函數(shù)的python實現(xiàn)
python實現(xiàn)階躍函數(shù)
為了方便階躍函數(shù)的參數(shù)取Numpy數(shù)組,用以下方式實現(xiàn)階躍函數(shù)。
對numpy數(shù)組進(jìn)行不等號運(yùn)算后,數(shù)組的各個元素都會進(jìn)行不等號運(yùn)算,生成一個布爾型數(shù)組。
這個代碼里數(shù)組中x大于0的元素轉(zhuǎn)換成True,小于等于0的元素轉(zhuǎn)換成False。由于階躍函數(shù)要輸出int類型的0或1,所以添加一個dtype=np.int32。
import numpy as np import matplotlib.pylab as pltdef 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范圍內(nèi),以0.1為單位生成Numpy數(shù)組# [-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實現(xiàn)sigmoid函數(shù)
下面定義的函數(shù)的參數(shù)x是Numpy數(shù)組時,結(jié)果也能正確被計算。因為Numpy具有廣播功能,如果標(biāo)量和Numpy數(shù)組進(jìn)行數(shù)值運(yùn)算,那么這個標(biāo)量將和Numpy數(shù)組中的各個元素進(jìn)行運(yùn)算。
import numpy as np import matplotlib.pylab as pltdef 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實現(xiàn)ReLU函數(shù)
代碼中使用Nmupy的maximum函數(shù),該函數(shù)會從輸入的數(shù)值中選擇較大的值進(jìn)行輸出。
import numpy as np import matplotlib.pylab as pltdef 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()激活函數(shù)的特點
上面的激活函數(shù)無論是階躍、sigmoid還是ReLU,使用的都是非線性函數(shù),如果使用線性函數(shù),比如h(x)=ax作為激活函數(shù),那么y(x) = h(h(h(x)))的運(yùn)算對應(yīng)3層神經(jīng)網(wǎng)絡(luò),這個運(yùn)算會進(jìn)行y(x) = aaax的乘法運(yùn)算,但是同樣的處理可以由y(x)=bx(b=aaa)這一次乘法運(yùn)算表示,也還是相當(dāng)于一層神經(jīng)網(wǎng)絡(luò)。也就是說,使用線性函數(shù)的話,加深神經(jīng)網(wǎng)絡(luò)的層數(shù)就沒有意義了。為了發(fā)揮疊加層的優(yōu)勢,激活函數(shù)必須使用非線性函數(shù)。
總結(jié)
以上是生活随笔為你收集整理的神经网络的激活函数、并通过python实现激活函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python之if经典语句_Python
- 下一篇: python write 写多行_如何用