新聞中心
本關任務:通過對激活函數(shù)知識的學習,使用 Python 編寫指定的激活函數(shù)。
為了完成本關任務,你需要掌握:
- 激活函數(shù)概述;
- 線性函數(shù);
- Sigmoid 函數(shù);
- Tanh 函數(shù);
- ReLU 函數(shù);
- Python 補充知識。
神經(jīng)網(wǎng)絡中的每個神經(jīng)元節(jié)點接受上一層神經(jīng)元的輸出值作為本神經(jīng)元的輸入值,并將輸入值傳遞給下一層,輸入層神經(jīng)元節(jié)點會將輸入屬性值直接傳遞給下一層(隱層或輸出層)。在多層神經(jīng)網(wǎng)絡中,上層節(jié)點的輸出和下層節(jié)點的輸入之間具有一個函數(shù)關系,這個函數(shù)稱為激活函數(shù)(又稱激勵函數(shù))。 激活函數(shù)是計算神經(jīng)網(wǎng)絡中非常重要的一環(huán),激活函數(shù)增加了神經(jīng)網(wǎng)絡模型的非線性特征,倘若神經(jīng)網(wǎng)絡中不存在激活函數(shù),那么無論神經(jīng)網(wǎng)絡的深度有多少層 ,最終均是若干次的矩陣相乘,若輸入輸出依然存在線性關系,則對于機器學習就失去了意義 。
線性函數(shù)線性函數(shù)十分的簡單,就是我們常見的函數(shù),其數(shù)學形式如下:
其中a
和b
均為常數(shù)。
Sigmoid 函數(shù)是一個有著優(yōu)美s
形曲線的數(shù)學函數(shù),在邏輯回歸、人工神經(jīng)網(wǎng)絡中有著廣泛的應用。其數(shù)學形式如下:
其對應的圖像如圖1所示:
圖1 Sigmoid 函數(shù)圖像
優(yōu)點:
- Sigmoid 函數(shù)的輸出映射在 (0,1) 之間,單調(diào)連續(xù),輸出范圍有限,優(yōu)化穩(wěn)定。
- Sigmoid 函數(shù)求導容易。
缺點:
- Sigmoid 函數(shù)由于飽和性,容易產(chǎn)生梯度消失。
- Sigmoid 函數(shù)的輸出并不是以 0 為中心。
在使用numpy
實現(xiàn) Sigmoid 函數(shù)時,en
可以使用numpy.exp(n)
函數(shù)實現(xiàn):
Tanh 函數(shù)
import numpy as np
e_10 = np.exp(10) # e^10
Tanh 函數(shù)也叫雙曲正切函數(shù),其數(shù)學形式如下:
其對應的圖像如圖2所示:
圖2 Tanh 函數(shù)圖像
優(yōu)點:
- Tanh 函數(shù)比 Sigmoid 函數(shù)收斂的更快。
- 與 Sigmoid 函數(shù)相比,Tanh 函數(shù)的輸出以 0 為中心。
缺點: Tanh 函數(shù)依舊存在由于飽和性產(chǎn)生的梯度消失問題。
ReLU 函數(shù)ReLU 函數(shù)的數(shù)學形式如下:
其對應的圖像如圖3所示:
圖3 ReLU 函數(shù)圖像
優(yōu)點:
- Sigmoid 和 Tanh 函數(shù)涉及了消耗很大的操作(比如指數(shù)),ReLU 可以更加簡單的實現(xiàn)。
- ReLU 函數(shù)有效的緩解了梯度消失問題。
- ReLU 函數(shù)在沒有無監(jiān)督預訓練的時候也能有較好的表現(xiàn)。
缺點:
隨著訓練的進行,可能權(quán)重無法更新的情況。
對于實現(xiàn) ReLU 函數(shù),可以嘗試使用numpy.where(arr,a,b)
,具體使用可以參考numpy.where()使用方法。
編程要求
根據(jù)提示,在右側(cè)編輯器 Begin-End 區(qū)間補充代碼,完成 Sigmoid 函數(shù)、Tanh 函數(shù)以及 Relu 函數(shù)的編寫,只有三個函數(shù)同時正確時,才能提交成功。
測試說明平臺會對你編寫的代碼進行測試:
測試輸入:無
預期輸出:
True
開始你的任務吧,祝你成功!
import numpy as np
class ActivationFunction(object):
def sigmoid(self,x):
"""
Sigmoid 函數(shù)
:param x: 函數(shù)的輸入,類型為list
:return: y, 函數(shù)的計算結(jié)果
"""
########## Begin ##########
y = 1/(1+np.exp(-x))
########## End ##########
return y
def tanh(self,x):
"""
Tanh 函數(shù)
:param x: 函數(shù)的輸入,類型為list
:return: y, 函數(shù)的計算結(jié)果
"""
########## Begin ##########
y = (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))
########## End ##########
return y
def ReLU(self,x):
"""
ReLU 函數(shù)
:param x: 函數(shù)的輸入,類型為list
:return: y, 函數(shù)的計算結(jié)果
"""
########## Begin ##########
y = np.where(x>0,x,0)
########## End ##########
return y
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)頁標題:第2關:激活函數(shù)-創(chuàng)新互聯(lián)
文章來源:http://www.ef60e0e.cn/article/djhiso.html