2017-05-09 3 views
2

J'essaie d'obtenir les valeurs d'une couche dans un réseau formé. Je peux obtenir la couche comme tensorflow Tensor, mais je suis incapable d'accéder à ses valeurs dans une forme de tableau:Keras - Obtenir le poids du calque formé

from keras.models import load_model 

model = load_model('./model.h5') 
layer_dict = dict([(layer.name, layer) for layer in model.layers]) 

layer_name = 'block5_sepconv1_act' 
filter_index = 0 

layer_output = layer_dict['model_1'][layer_name].output 
# <tf.Tensor 'block5_sepconv1_act/Relu:0' shape=(?, 16, 16, 728) dtype=float32> 
layer_filter = layer_output[:, :, :, filter_index] 
# <tf.Tensor 'strided_slice_11:0' shape=(?, 16, 16) dtype=float32> 
# how do I get the 16x16 values ?? 
+2

Voulez-vous les valeurs de sortie ou les poids? Ils ne sont pas les mêmes. –

Répondre

2

Si vous utilisez le backend tensorflow, vous pouvez évaluer la valeur d'un tenseur en utilisant la session en cours sess et alimentant l'entrée correcte

import keras.backend as K 

input_value = np.zeros(size=(batch_size, input_dim)) 
sess = K.get_session() 
output = sess.run(layer_output, feed_dict={model.input: input_value}) 

Si vous voulez juste récupérer les poids, vous pouvez évaluer les poids d'une couche en utilisant:

weights = [w.eval(K.get_session) for w in layer_dict['model_1'][layer_name].weights] 
2

.get_weights() renverront le poids d'une couche ou un modèle spécifique en tant que tableau numpy

layer_dict[layer_name].get_weights() 

Si vous voulez la sortie de la couche, vérifiez les réponses à la question here.