在 VGG-16 上停止和重新开始训练
Stop and Restart Training on VGG-16
我正在使用预训练的 VGG-16 模型进行图像分类。我正在添加自定义最后一层,因为我的分类数 类 是 10。我正在训练模型 200 个时期。
我的问题是:如果我随机停止(通过关闭python window)训练在某个时期有什么办法,假设时期没有。 50 并从那里恢复?我已阅读有关保存和重新加载模型的信息,但我的理解是它仅适用于我们的自定义模型,而不适用于像 VGG-16 这样的预训练模型。
您可以使用 ModelCheckpoint
回调来定期保存您的模型。要使用它,请将 callbacks
参数传递给 fit
方法:
from keras.callbacks import ModelCheckpoint
checkpointer = ModelCheckpoint(filepath='model-{epoch:02d}.hdf5', ...)
model.fit(..., callbacks=[checkpointer])
然后,稍后您可以加载上次保存的模型。有关此回调的更多自定义,请查看文档。
这里是 ModelCheckpoint that I use to resume training from a given epoch, gist 的自定义版本。它会将epoch和其他日志保存到相应的JSON文件中,它还会在开始时检查是否恢复训练。您需要调用 get_last_epoch
并在 model.fit
中设置 initial_epoch
才能从那个纪元恢复。
import json
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_train_begin(self, logs=None):
prefix = "Resuming" if self.state else "Starting"
print("{} training...".format(prefix))
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}
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)
我正在使用预训练的 VGG-16 模型进行图像分类。我正在添加自定义最后一层,因为我的分类数 类 是 10。我正在训练模型 200 个时期。
我的问题是:如果我随机停止(通过关闭python window)训练在某个时期有什么办法,假设时期没有。 50 并从那里恢复?我已阅读有关保存和重新加载模型的信息,但我的理解是它仅适用于我们的自定义模型,而不适用于像 VGG-16 这样的预训练模型。
您可以使用 ModelCheckpoint
回调来定期保存您的模型。要使用它,请将 callbacks
参数传递给 fit
方法:
from keras.callbacks import ModelCheckpoint
checkpointer = ModelCheckpoint(filepath='model-{epoch:02d}.hdf5', ...)
model.fit(..., callbacks=[checkpointer])
然后,稍后您可以加载上次保存的模型。有关此回调的更多自定义,请查看文档。
这里是 ModelCheckpoint that I use to resume training from a given epoch, gist 的自定义版本。它会将epoch和其他日志保存到相应的JSON文件中,它还会在开始时检查是否恢复训练。您需要调用 get_last_epoch
并在 model.fit
中设置 initial_epoch
才能从那个纪元恢复。
import json
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_train_begin(self, logs=None):
prefix = "Resuming" if self.state else "Starting"
print("{} training...".format(prefix))
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}
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)