激活函數sigmoid、tanh、relu、Swish


激活函數的作用主要是引入非線性因素,解決線性模型表達能力不足的缺陷

  sigmoid函數可以從圖像中看出,當x向兩端走的時候,y值越來越接近1和-1,這種現象稱為飽和,飽和意味着當x=100和x=1000的映射結果是一樣的,這種轉化相當於將1000大於100的信息丟失了很多,所以一般需要歸一化數據。

 

 

softplus函數相比於relu函數更加平滑,會保存部分小於零的函數,但是計算量也更大了。

  relu函數在信號響應上有很多優勢,但是僅僅在正向傳播中,由於其對負值全部舍去很容易使模型輸出全零而無法訓練。例如:隨機初始化的w中存在負值,其對應的正值輸入特征也就被全部屏蔽了,同理對應的負值輸入反而被激活了。因此,一些relu變種被開發,此處不詳細講解。

Swish是谷歌公司發現一個效果更優於relu的激活函數:

神經網絡激活函數總結:

  tanh函數適用於特征相差明顯時的效果會很好,在循環中會不斷擴大特征效果並將其顯示出來。但當特征之間相差比較復雜沒有明顯的區別,或者特征間的相差不是特別大需要細微的分類判斷時,sigmoid函數的效果會更好。relu函數的優勢在於經過處理后的數據具有很好的稀疏性。

keras中自定義激活函數:

from keras import backend as K
from keras.models import Sequential,Model
from keras.layers import Dense
import numpy as np

def Swish(x):
    return x*K.sigmoid(1.0*x)

model = Sequential()
model.add(Dense(32,activation="relu",input_dim=100))
model.add(Dense(16,activation="relu",name="Dense_1"))
model.add(Dense(1, activation=Swish,name="Dense_2"))
model.compile(optimizer
='rmsprop',loss='binary_crossentropy',metrics=['accuracy']) #假設訓練和測試使用同一組數據 data = np.random.random((1000, 100)) labels = np.random.randint(2, size=(1000, 1)) model.fit(data,labels,epochs=10,batch_size=32) model.predict(data)

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM