Python / Keras - 为每个纪元创建一个带有一个预测的回调

时间:2016-04-27 16:26:43

标签: python subclassing keras

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

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

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

嗯,这个理论似乎很有形,但我编写代码却很麻烦。有人能够给出一个代码示例吗?

不确定如何实现Callback()子类化以及如何将其与model.predict函数中的on_epoch_end 混合使用。

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

修改

好吧,我进化了一点。 了解如何创建子类以及如何将其链接到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

1 个答案:

答案 0 :(得分:9)

你正在覆盖每个时代的预测,这就是为什么它不起作用。我会这样做:

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现在是一个列表,每个预测都会在每个时代结束时附加到列表中。