2017-07-08 9 views
5

Ich habe versucht, ein sequenzielles Modell in Keras mit der Pooling-Schicht tf.nn.fractional_max_pool zu erstellen. Ich weiß, ich könnte versuchen, meine eigene benutzerdefinierte Ebene in Keras zu erstellen, aber ich versuche zu sehen, ob ich die Ebene bereits in Tensorflow verwenden kann. Für den folgenden Code-Schnipsel:Verwenden von Tensorflow-Schichten in Keras

p_ratio=[1.0, 1.44, 1.44, 1.0] 

model = Sequential() 
model.add(ZeroPadding2D((2,2), input_shape=(1, 48, 48))) 
model.add(Conv2D(320, (3, 3), activation=PReLU())) 
model.add(ZeroPadding2D((1,1))) 
model.add(Conv2D(320, (3, 3), activation=PReLU())) 
model.add(InputLayer(input_tensor=tf.nn.fractional_max_pool(model.layers[3].output, p_ratio))) 

Ich erhalte diesen error. Ich habe ein paar andere Dinge mit Input anstelle von InputLayer und auch die Keras Functional API versucht, aber bisher kein Glück.

+0

Gut gemacht. Ich schlage vor, den EDIT-Teil in eine Antwort zu verschieben (es ist nichts falsch daran, eigene Fragen in SO zu beantworten) und akzeptiere sie. – desertnaut

+0

@desertnaut wird es tun! –

Antwort

5

Habe es zum arbeiten. Für zukünftige Referenz, dies ist, wie Sie es implementieren müssten. Da tf.nn.fractional_max_pool 3 Tensoren zurückgibt, müssen Sie nur die erste erhalten:

model.add(InputLayer(input_tensor=tf.nn.fractional_max_pool(model.layers[3].output, p_ratio)[0])) 

Oder mit Lambda-Schicht:

def frac_max_pool(x): 
    return tf.nn.fractional_max_pool(x,p_ratio)[0] 

Mit der Modellimplementierung Wesen:

model.add(Lambda(frac_max_pool))