Python 如果发生大修,如何避免失去过去在Keras的运行? 什么是一个好的实践,如果在中间发生了什么事情,不损失网络训练的时间/天? < P>一个简单的解决方案是使用日志记录并定期地将模型序列化到磁盘上。您可以保留最多5个版本的网络,以避免磁盘内存不足

Python 如果发生大修,如何避免失去过去在Keras的运行? 什么是一个好的实践,如果在中间发生了什么事情,不损失网络训练的时间/天? < P>一个简单的解决方案是使用日志记录并定期地将模型序列化到磁盘上。您可以保留最多5个版本的网络,以避免磁盘内存不足,python,tensorflow,neural-network,keras,Python,Tensorflow,Neural Network,Keras,Python具有强大的功能,您可能会发现序列化模型很有用。一个简单的解决方案是使用日志记录并定期将模型序列化到磁盘。您可以保留最多5个版本的网络,以避免磁盘内存不足 Python具有强大的功能,您可能会发现序列化模型很有用。我使用一个自定义回调,存储上一个历元、权重、损失等,然后继续: class StatefulCheckpoint(ModelCheckpoint): """Save extra checkpoint data to resume training.""" def __

Python具有强大的功能,您可能会发现序列化模型很有用。

一个简单的解决方案是使用日志记录并定期将模型序列化到磁盘。您可以保留最多5个版本的网络,以避免磁盘内存不足


Python具有强大的功能,您可能会发现序列化模型很有用。

我使用一个自定义回调,存储上一个历元、权重、损失等,然后继续:

class StatefulCheckpoint(ModelCheckpoint):
  """Save extra checkpoint data to resume training."""
  def __init__(self, weight_file, state_file=None, **kwargs):
    """Save the state (epoch etc.) along side weights."""
    super().__init__(weight_file, **kwargs)
    self.state_f = state_file
    self.state = dict()
    if self.state_f:
      # Load the last state if any
      try:
        with open(self.state_f, 'r') as f:
          self.state = json.load(f)
        self.best = self.state['best']
      except Exception as e: # pylint: disable=broad-except
        print("Skipping last state:", e)

  def on_epoch_end(self, epoch, logs=None):
    """Saves training state as well as weights."""
    super().on_epoch_end(epoch, logs)
    if self.state_f:
      state = {'epoch': epoch+1, 'best': self.best,
               'hostname': self.hostname}
      state.update(logs)
      state.update(self.params)
      with open(self.state_f, 'w') as f:
        json.dump(state, f)

  def get_last_epoch(self, initial_epoch=0):
    """Return last saved epoch if any, or return default argument."""
    return self.state.get('epoch', initial_epoch)

这仅在您的历元具有合理的时间(例如1小时)时有效,但它是干净的,并且与Keras API一致。

我使用一个自定义回调来存储最后一个历元、权重、损失等,以便在之后恢复:

class StatefulCheckpoint(ModelCheckpoint):
  """Save extra checkpoint data to resume training."""
  def __init__(self, weight_file, state_file=None, **kwargs):
    """Save the state (epoch etc.) along side weights."""
    super().__init__(weight_file, **kwargs)
    self.state_f = state_file
    self.state = dict()
    if self.state_f:
      # Load the last state if any
      try:
        with open(self.state_f, 'r') as f:
          self.state = json.load(f)
        self.best = self.state['best']
      except Exception as e: # pylint: disable=broad-except
        print("Skipping last state:", e)

  def on_epoch_end(self, epoch, logs=None):
    """Saves training state as well as weights."""
    super().on_epoch_end(epoch, logs)
    if self.state_f:
      state = {'epoch': epoch+1, 'best': self.best,
               'hostname': self.hostname}
      state.update(logs)
      state.update(self.params)
      with open(self.state_f, 'w') as f:
        json.dump(state, f)

  def get_last_epoch(self, initial_epoch=0):
    """Return last saved epoch if any, or return default argument."""
    return self.state.get('epoch', initial_epoch)
这只适用于你的时代是合理的时间,例如1小时,但它是干净的,符合Keras API