2017-01-10 1 views
1

Mon modèle Keras est le babi_rnn example dans le référentiel Keras.Récupération d'un modèle/calque Keras

Je veux obtenir la sortie (en mots) du modèle sur un jeu de données.

J'ai essayé:

layer = model.layers[-1] # For the last layer 
    f = K.function([model.get_input(train=False)], [layer.get_output(train=False)]) 
    print(f([x])[0]) # your activation tensor 

mais je reçois l'erreur:

AttributeError: 'Sequential' object has no attribute 'get_input' 

Comment puis-je obtenir simplement la sortie du modèle ou de la couche lorsqu'elle est alimentée par une entrée?

C'est, je dois

# I supply the X list and want to get the Y list. 

    Y = Model(X) # X and Y are both lists. Model.Layer[Index] can also be a use case. 

    # The responses are the set of label probabilities for each word in the vocabulary. 

Alors que je pouvais faire: for x, y in zip(X,Y): print(x,y) pour voir quel est le modèle en train de faire. Je pense que cela aurait dû être le cas d'utilisation le plus simple, mais cela semble difficile à mettre en œuvre.

Toute aide serait grandement appréciée. Merci.

Répondre

2

Vous pouvez simplement utiliser model.predict pour obtenir Y la fonction predict appelle en interne _make_predict_function() qui fait ce que vous essayez de faire.

Mais votre modèle est entraîné pour mapper certains types d'entrée à certains types de sortie ... vous devez donc prendre soin de ces fonctions tout en utilisant la fonction predict et en interprétant la même chose. Dans cet exemple, cette conversion est faite en vectorize_stories() alors essayez et comprenez ce qu'il fait.

Dans ce cas, pour obtenir le mot prédit tout ce que vous devez faire après la formation du modèle est:

Y_pred = model.predict([tX, tXq]) 
for pred in Y_pred: 
    print (vocab[pred.argmax()-1]) 

Notez à nouveau tX est l'histoire de test vectorisé tXq est la requête de test vectorisé et Y_pred est votre vectorisé prédit répondre par le modèle.

+1

merci beaucoup pour l'aide. pourriez-vous expliquer comment obtenir la sortie de n'importe quelle couche en général? J'ai essayé mais je reçois l'erreur dans la question. Merci. – Rafael

+1

Pour tout calque, vous pouvez utiliser 'model.layers [index] .input'' model.layers [index] .output' pour obtenir l'entrée et la sortie de la couche. Pour les modèles séquentiels, vous pouvez également utiliser 'model.input'' model.output' pour l'entrée et la sortie de l'ensemble du modèle. – indraforyou