2016-04-20 9 views
4

Ich versuche gerade, die Ausgabe einer Zwischenschicht in Keras 1.0 zu visualisieren (was ich mit Keras 0.3 tun könnte), aber es funktioniert nicht mehr.Keras 1.0: Zwischenschicht ausgeben

x = model.input 
y = model.layers[3].output 
f = theano.function([x], y) 

Aber ich erhalte den folgenden Fehler:

MissingInputError: ("An input of the graph, used to compute DimShuffle{x,x,x,x}(keras_learning_phase), was not provided and not given a value.Use the Theano flag exception_verbosity='high',for more information on this error.", keras_learning_phase) 

Vor Keras 1.0, mit meinem Diagrammmodell, konnte ich nur tun:

x = graph.inputs['input'].input 
y = graph.nodes[layer].get_output(train=False) 
f = theano.function([x], y, allow_input_downcast=True) 

So vermute ich es von kommen der Parameter "train = False", den ich in der neuen Version nicht einstellen kann.

Vielen Dank für Ihre Hilfe

+0

Bitte beachten Sie, dass Graph-Modell nicht mehr mit Keras 1.0 unterstützt wird. Das sequenzielle Modell wurde um die Option Zusammenführen erweitert, und das Diagrammmodell wurde durch die funktionale API ersetzt. Ich rate Ihnen, aufmerksam zu lesen: http://keras.io/getting-started/functional-api-guide/ um weitere Informationen zu erhalten. –

Antwort

3

Dies ist nur durch François Chollet auf Github beantwortet wurde:

Your model apparently has a different behavior in training and test mode, and so needs to know what mode it should be using.

Use

iterate = K.function([input_img, K.learning_phase()], [loss, grads])

and pass 1 or 0 as value for the learning phase, based on whether you want the model in training mode or test mode.

https://github.com/fchollet/keras/issues/2417

5

Versuchen: In den Import-Anweisungen zuerst

from keras import backend as K 
from theano import function 
geben

dann

f = K.function([model.layers[0].input, K.learning_phase()], 
           [model.layers[3].output]) 
# output in test mode = 0 
layer_output = get_3rd_layer_output([X_test, 0])[0] 

# output in train mode = 1 
layer_output = get_3rd_layer_output([X_train, 1])[0]