首页 > 解决方案 > 从LSTM,Keras中每个时期的最后一层获取输出

问题描述

我们已经知道每一层的输出可以从下面的代码中获得:

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 个 epoch 中为每个 epoch 获得模型中最后一层的输出呢?

标签: pythonmachine-learningkerasdeep-learninglstm

解决方案


您可以创建自定义回调(请参阅文档)并将其传递给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()])

如果您不想在单独的类中创建回调,您还应该能够使用Lambda 回调


推荐阅读