Получить вывод из последнего слоя в каждой эпохе в LSTM, Керас - PullRequest
0 голосов
/ 13 октября 2018

Мы уже знаем, что выход каждого слоя может быть получен из следующего кода:

def get_layer(model,x):
    from keras import backend as K

    get_3rd_layer_output = K.function([model.layers[0].input],
                                      [model.layers[2].output])
    layer_output = get_3rd_layer_output([x])[0]
    print(layer_output.shape)
    return layer_output

Модель LSTM подходит как:

history = model.fit(X_train, y_train, batch_size=batch_size,verbose=1, nb_epoch=10,validation_data=(X_test,y_test))

Но как получить выход изпоследний слой в модели для каждой эпохи из 10 эпох?

1 Ответ

0 голосов
/ 14 октября 2018

Вы можете создать пользовательский обратный вызов ( см. Документация ) и передать его в список обратного вызова в методе fit.

Пример:

from keras.callbacks import Callback

class LogThirdLayerOutput(Callback):
    def on_epoch_end(self, epoch, logs=None):
        layer_output = get_3rd_layer_output(self.validation_data)[0]
        print(layer_output.shape)

А при подгонке модели:

history = model.fit(X_train, y_train, batch_size=batch_size, verbose=1, nb_epoch=10, validation_data=(X_test,y_test), callbacks=[LogThirdLayerOutput()])

Если вы не хотите создавать обратный вызов в отдельном классе, вы также должны иметь возможность использовать Лямбда-обратные вызовы .

...