Keras 1,0: obtenção de saída camada intermédia

votos
4

Atualmente, estou tentando visualizar a saída de uma camada intermediária em Keras 1.0 (que eu poderia fazer com Keras 0,3), mas ele não funciona mais.

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

Mas eu recebo o seguinte erro:

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)

Antes de Keras 1.0, com o meu modelo gráfico, eu poderia apenas fazer:

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

Então, eu suspeito que vir do trem = False parâmetro que eu não sei como definir na nova versão.

obrigado pela ajuda

Publicado 20/04/2016 em 12:45
fonte usuário
Em outras línguas...                            


2 respostas

votos
3

Este foi apenas respondidas por François Chollet no github:

Seu modelo, aparentemente, tem um comportamento diferente no modo de treino e de teste, e assim precisa saber o modo que deve usar.

Usar

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

e passar 1 ou 0 como valor para a fase de aprendizagem, com base em se você quiser o modelo no modo de treino ou modo de teste.

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

Respondeu 22/04/2016 em 08:14
fonte usuário

votos
5

Tente: Nas demonstrações importação primeiro dar

from keras import backend as K
from theano import function

então

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]
Respondeu 04/05/2016 em 04:29
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more