【问题标题】:Python/Keras - Creating a callback with one prediction for each epochPython/Keras - 为每个时期创建一个带有一个预测的回调
【发布时间】:2016-08-22 02:15:06
【问题描述】:

我正在使用 Keras 来预测时间序列。作为标准,我使用 20 个 epoch。我想知道我的神经网络在 20 个 epoch 中的每一个都预测了什么。

通过使用 model.predict,我在所有时代中只得到一个预测(不确定 Keras 是如何选择它的)。我想要所有预测,或者至少 10 个最好的预测。

根据我之前得到的答案,我应该通过子类化Callback() 并在on_epoch_end 函数内的模型上调用预测来实现适当的回调,从而计算每个训练时期之后的预测。

好吧,这个理论似乎已经成型,但我在编写代码时遇到了麻烦。谁能给出一个代码示例?

不知道如何实现 Callback() 子类,也不知道如何在 on_epoch_end 函数中将其与 model.predict 混合。

我们将非常感谢您的帮助 :)


编辑

嗯,我进化了一点。 了解如何创建子类以及如何将其链接到 model.predict。 但是,我正在思考如何创建一个包含所有预测的列表。以下是我当前的代码:

#Creating a Callback subclass that stores each epoch prediction
class prediction_history(Callback):
    def on_epoch_end(self, epoch, logs={}):
        self.predhis=(model.predict(predictor_train))

#Calling the subclass
predictions=prediction_history()

#Executing the model.fit of the neural network
model.fit(X=predictor_train, y=target_train, nb_epoch=2, batch_size=batch,validation_split=0.1,callbacks=[predictions]) 

#Printing the prediction history
print predictions.predhis

但是,我得到的只是最后一个时期的预测列表(与打印 model.predict(predictor_train) 的效果相同)。

现在的问题是:如何调整我的代码,以便将每个时期的预测添加到predhis

【问题讨论】:

    标签: python subclassing keras


    【解决方案1】:

    您正在覆盖每个时期的预测,这就是它不起作用的原因。我会这样做:

    class prediction_history(Callback):
        def __init__(self):
            self.predhis = []
        def on_epoch_end(self, epoch, logs={}):
            self.predhis.append(model.predict(predictor_train))
    

    这样 self.predhis 现在是一个列表,每个预测都会在每个 epoch 结束时附加到列表中。

    【讨论】:

    • 优秀。非常感谢 Matias 的所有帮助。
    • 我尝试过使用代码 sn-p,但在回调的“def on_batch_end()”部分。但是在执行此操作时,model.predict(predictor_train) 会在整个训练集上评估模型,而不仅仅是当前批次。有没有办法改变这种情况?
    • @Lemon 在 epoch 结束时没有“当前批次”,您只需将 predictor_train 更改为您想要用于评估的任何数据。
    • 有关更多详细信息,请参阅有关回调的官方 Keras 文档,keras.io/callbacks
    猜你喜欢
    • 2018-12-04
    • 2019-05-27
    • 2020-02-21
    • 1970-01-01
    • 2018-04-15
    • 2018-10-23
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    相关资源
    最近更新 更多