神经网络的激活函数、并通过python实现激活函数
神經網絡的激活函數、并通過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 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范圍內,以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 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實現ReLU函數
代碼中使用Nmupy的maximum函數,該函數會從輸入的數值中選擇較大的值進行輸出。
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()激活函數的特點
上面的激活函數無論是階躍、sigmoid還是ReLU,使用的都是非線性函數,如果使用線性函數,比如h(x)=ax作為激活函數,那么y(x) = h(h(h(x)))的運算對應3層神經網絡,這個運算會進行y(x) = aaax的乘法運算,但是同樣的處理可以由y(x)=bx(b=aaa)這一次乘法運算表示,也還是相當于一層神經網絡。也就是說,使用線性函數的話,加深神經網絡的層數就沒有意義了。為了發揮疊加層的優勢,激活函數必須使用非線性函數。
總結
以上是生活随笔為你收集整理的神经网络的激活函数、并通过python实现激活函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python之if经典语句_Python
- 下一篇: python write 写多行_如何用