Keras自定义回调以保存历史记录字典和回调顺序

时间:2018-09-06 13:36:55

标签: python tensorflow keras

我想在每个时期保存整个培训历史字典。看来keras.callbacks.History().history对象中生成了此字典?我正在编写一个回调,将字典在每个时期保存为json,如下所示;

class MyCallback(ks.callbacks.Callback):
    def __init__(self,model_folder_path):
        self.model_folder_path = model_folder_path

    def on_epoch_end(self, epoch, logs={}):
        this_path = os.path.join(self.model_folder_path,"History epoch {:02d}.json".format(epoch))
        with open(this_path, 'w') as fh:
            json.dump(self.model.history.history, fh)
        print("Saved history to {}".format(this_path))

并添加到我的回调列表中。当我进行训练时,每个历史记录对象都缺少当前纪元的历史记录-我认为这意味着在我的回调之后将调用keras.callbacks.History()回调,因此我的回调没有看到当前的变化。它是否正确?我可以指定我的回调在呼叫顺序中排在最后吗?在此期间,我尝试过keras.callbacks.CSVLogger,但我想直接保存字典。我在GitHub上找到了stale issue-其他提示?

1 个答案:

答案 0 :(得分:0)

要将模型的历史记录保存到文件中,而不是使用json.dump,请使用

    with open('/path_to_your_history', 'wb') as file_pi:
        pickle.dump(history.history, file_pi)

历史记录是model.fit()

的输出