2017-05-09 4 views
2

私は訓練されたネットワーク内のレイヤの値を取得しようとしています。私はTensorFlowテンソルとして層を得ることができますが、私は、アレイ状にその値にアクセスすることができないよ:ケラス - 訓練されたレイヤの重みを取得する

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

出力値または重みを使用しますか?彼らは同じではありません。 –

答えて

2

あなたがtensorflowバックエンドを使用する場合は、あなただけのウェイトを取得したい場合は、あなたが重みを評価することができ、現在のセッションsessを使用して

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}) 

正しい入力を供給テンソルの価値を評価することができます

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

.get_weights()がnumpyの配列

layer_dict[layer_name].get_weights() 
として、特定の層やモデルのウェイトを返します。

レイヤの出力が必要な場合は、質問hereの回答を確認してください。

関連する問題