2016-05-09 9 views

Antwort

5

Sie sind im Wesentlichen gleich. Der Vorteil, es separat zu setzen, ist, dass Sie andere Schichten (zB BatchNormalization) dazwischen hinzufügen können.

In Keras, wenn nicht anders angegeben, wird Convolution2D verwenden, um die ‚linear‘ Aktivierung durch Standard, die nur die Identitätsfunktion ist

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

und alles, was Activation Schicht nicht bewirbt sich die Aktivierungsfunktion an den Eingang

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

Edit:

Also im Grunde Convolution2D(activation = 'relu') gilt relu Aktivierungsfunktion nach der Faltung durchgeführt wird, die gleich ist wie Activation('relu') nach Convolution2D(32, 3, 3)

die letzten beiden Zeilen der call Funktion der Convolution2D Schicht

output = self.activation(output) 
return output 

Anwendung, wo output ist die Ausgabe von Faltung. So wissen wir, die Aktivierung der Funktion ist der letzte Schritt von Convolution2D.

Quellcode:
Convolution2D Schicht: https://github.com/fchollet/keras/blob/a981a8c42c316831183cac7598266d577a1ea96a/keras/layers/convolutional.py
Activation Schicht: https://github.com/fchollet/keras/blob/a981a8c42c316831183cac7598266d577a1ea96a/keras/layers/core.py
Aktivierungsfunktionen: https://github.com/fchollet/keras/blob/master/keras/activations.py

+0

Nur um zu klären. Im Grunde wendet Convolution2D (Aktivierung = 'relu') die Reluq-Aktivierungsfunktion an, nachdem Faltung ausgeführt wurde, was der gleichen ist wie die Aktivierung ('relu') nach Convolution2D (32, 3, 3)? – angubenko

+0

@angubenko Ja, ich habe einen Code und eine Erklärung in der Antwort hinzugefügt, hoffe, dass das hilft. – dontloo

+0

das hilft viel, danke! – angubenko