2016-05-09 21 views

回答

5

他們基本上是相同的。分開放置的好處是您可以在其間添加其他圖層(如BatchNormalization)。

在Keras,如果沒有指定,Convolution2D將使用默認的「線性」激活,這僅僅是恆等函數

def linear(x): 
    ''' 
    The function returns the variable that is passed in, so all types work. 
    ''' 
    return x 

和所有Activation層不被施加所述激活功能到輸入

def call(self, x, mask=None): 
    return self.activation(x) 

編輯:

所以基本上Convolution2D(activation = 'relu')進行卷積後適用RELU激活功能,這是相同的後Convolution2D(32, 3, 3)

施加Activation('relu')Convolution2D層的call函數的最後兩行是

output = self.activation(output) 
return output 

其中output是的輸出卷積。所以我們知道應用激活功能是Convolution2D的最後一步。

源代碼:
Convolution2D層:https://github.com/fchollet/keras/blob/a981a8c42c316831183cac7598266d577a1ea96a/keras/layers/convolutional.py
Activation層:https://github.com/fchollet/keras/blob/a981a8c42c316831183cac7598266d577a1ea96a/keras/layers/core.py
激活函數:https://github.com/fchollet/keras/blob/master/keras/activations.py

+0

只是爲了澄清。因此,基本上Convolution2D(activation ='relu')在執行卷積之後應用relu激活函數,這與在Convolution2D(32,3,3)之後應用Activation('relu')相同? – angubenko

+0

@angubenko是的,我在答案中添加了一些代碼和解釋,希望有所幫助。 – dontloo

+0

,幫助很多,謝謝! – angubenko

相關問題