【问题标题】:Get output from last layer in each epoch in LSTM, Keras从LSTM,Keras中每个时期的最后一层获取输出
【发布时间】:2019-03-18 09:40:06
【问题描述】:

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

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的模型最后一层的输出呢?

【问题讨论】:

    标签: python machine-learning keras deep-learning lstm


    【解决方案1】:

    您可以创建自定义回调 (see Documentation) 并将其传递给 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 callbacks

    【讨论】:

    • 在这种情况下,我们能否从training data 中获取layer_output 而不是Callback 中的validation data
    猜你喜欢
    • 2019-03-28
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    • 2019-10-08
    • 1970-01-01
    • 2019-01-27
    相关资源
    最近更新 更多