Как я могу получить выход промежуточного слоя? - PullRequest
1 голос
/ 23 мая 2019

Я пытаюсь понять код колба от Google .Как мне использовать этот код:

from keras import backend as K
prediction_model = lstm_model(seq_len=1, batch_size=BATCH_SIZE, stateful=True)
prediction_model.load_weights('/tmp/bard.h5')

get_test_layer_output = K.function([prediction_model.layers[0].input],
                                  [prediction_model.layers[1].output])
layer_output = get_test_layer_output([x])[0]

, чтобы увидеть значения после каждого слоя?Или есть какой-то другой подход, чтобы увидеть значения (не фигуры)?

Layer (type)                 Output Shape              Param #   
=================================================================
seed (InputLayer)            (128, 100)                0         
_________________________________________________________________
embedding (Embedding)        (128, 100, 512)           131072    
_________________________________________________________________
lstm (LSTM)                  (128, 100, 512)           2099200   
_________________________________________________________________
lstm_1 (LSTM)                (128, 100, 512)           2099200   
_________________________________________________________________
time_distributed (TimeDistri (128, 100, 256)           131328    
=================================================================
Total params: 4,460,800
Trainable params: 4,460,800
Non-trainable params: 0

1 Ответ

0 голосов
/ 24 мая 2019

Для любой операции, которая должна выполняться на слоях модели Keras, сначала нам нужно получить доступ к списку keras.layers объекта, который содержит модель.

model_layers = model.layers

Каждый объект Layerв этом списке есть свои input и output тензоры (если вы используете бэкэнд TensorFlow)

input_tensor = model.layers[ layer_index ].input
output_tensor = model.layers[ layer_index ].output

Если вы напрямую запустите output_tensor с помощью метода tf.Session.run(), вы получите ошибка с указанием входных данных должна поступать в модель перед доступом к выходам слоев .

import tensorflow as tf
import numpy as np

layer_index = 3 # The index of the layer whose output needs to be fetched

model = tf.keras.models.load_model( 'model.h5' )
out_ten = model.layers[ layer_index ].output

with tf.Session() as sess:
    tf.global_variables_initializer().run()
    output = sess.run(  out_ten , { model.input : np.ones((2,186))}  ) 
    print( output )

Вам необходимо инициализировать переменные с помощью tf.global_variables_initializer().run() перед запуском модели.model.input обеспечивает тензор заполнителя для ввода модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...