我用Theano作爲後端使用Keras,我有Sequential神經網絡模型。這兩種在Keras中添加神經網絡圖層的方式有什麼區別?
我不知道以下是否有區別?
model.add(Convolution2D(32, 3, 3, activation='relu'))
和
model.add(Convolution2D(32, 3, 3))
model.add(Activation('relu'))
我用Theano作爲後端使用Keras,我有Sequential神經網絡模型。這兩種在Keras中添加神經網絡圖層的方式有什麼區別?
我不知道以下是否有區別?
model.add(Convolution2D(32, 3, 3, activation='relu'))
和
model.add(Convolution2D(32, 3, 3))
model.add(Activation('relu'))
他們基本上是相同的。分開放置的好處是您可以在其間添加其他圖層(如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
只是爲了澄清。因此,基本上Convolution2D(activation ='relu')在執行卷積之後應用relu激活函數,這與在Convolution2D(32,3,3)之後應用Activation('relu')相同? – angubenko
@angubenko是的,我在答案中添加了一些代碼和解釋,希望有所幫助。 – dontloo
,幫助很多,謝謝! – angubenko