【问题标题】:How can I get a Keras models' history after loading it from a file in Python?从 Python 中的文件加载 Keras 模型的历史记录后,如何获取它?
【发布时间】:2018-05-30 07:24:19
【问题描述】:

我已将keras 模型保存为h5py 文件,现在想从磁盘加载它。

训练我使用的模型时:

from keras.models import Sequential

model = Sequential()
H = model.fit(....)

当模型被训练时,我想从磁盘加载它

model = load_model()

如何从model 变量中获取H?不幸的是,它没有我可以调用的history 参数。是因为save_model函数没有保存历史吗?

【问题讨论】:

  • 保存模型只是保留模型的权重和架构。 history 对象是一个字典。您可以将字典保存为json 文件,也可以使用CSVLogger 回调将您的训练历史记录到文本文件中。

标签: python keras


【解决方案1】:

不幸的是,Keras 似乎没有实现直接从加载的模型加载历史的可能性。相反,您必须提前进行设置。这就是我使用CSVLogger 解决它的方法(实际上将整个训练历史记录在一个单独的文件中非常方便。这样你以后可以随时回来绘制你想要的任何历史记录,而不是依赖于一个你很容易丢失的变量存储在 RAM 中):

首先我们必须在开始训练之前设置记录器。

from keras.callbacks import CSVLogger

csv_logger = CSVLogger('training.log', separator=',', append=False)
model.fit(X_train, Y_train, callbacks=[csv_logger])

整个日志历史现在将存储在文件 'training.log' 中(在您的情况下,您将获得相同的信息,调用 H.history)。训练完成后,下一步就是加载存储在此文件中的数据。你可以用 pandas 做到这一点read_csv

import pandas as pd
log_data = pd.read_csv('training.log', sep=',', engine='python')

从这里开始,您可以像从K.history 加载数据一样处理存储在log_data 中的数据。

更多信息在Keras callbacks docs.

【讨论】:

  • 除了可以使用pandas 读回它之外,还有一种方法可以将历史文件(如您提到的用CSVLogger() 保存)作为原始History() 对象加载?就好像它是从 model.fit() 新计算的一样?
  • @s.k 通过使用CSVLogger,历史文件默认保存为.csv 格式。如果我理解您以这种方式加载它的目的是继续训练您的模型。然后,将参数append=True 设置为keras.callbacks.callbacks.CSVLogger(filename, separator=',', append=True) 中的参数,同时将initial_epoch 参数指定给要在再次将模型拟合到数据上时继续训练的时期。请参阅 callbacksfitting sequential models 的文档。
  • @Jakob 有没有办法在没有熊猫的情况下做到这一点,例如使用 csv 内置还是 numpy?
  • @Jakob 如何将数据帧结构映射到历史对象的结构?
  • @jtlz2 指用csv加载training.log文件?您应该能够在python documentation 中找到一些东西。顶部有一个有用的示例。至于另一个问题 - 我相信它值得提出一个新的 SO 问题。
【解决方案2】:

使用pickle 保存历史对象会引发一大堆错误。事实证明,您可以在H.history 上使用pickle 而不是H 来保存您的历史文件!

保存模型和历史文件有点烦人,但无论如何

【讨论】:

    猜你喜欢
    • 2019-06-18
    • 2014-11-03
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    相关资源
    最近更新 更多