Python 在每N个纪元结束时保存模型权重
我正在训练一个神经网络,并希望每N个历元保存一个预测阶段的模型权重。我提出了这个代码草案,它的灵感来自@grovina的回应。请你提些建议好吗? 提前谢谢Python 在每N个纪元结束时保存模型权重,python,tensorflow,callback,keras,Python,Tensorflow,Callback,Keras,我正在训练一个神经网络,并希望每N个历元保存一个预测阶段的模型权重。我提出了这个代码草案,它的灵感来自@grovina的回应。请你提些建议好吗? 提前谢谢 from keras.callbacks import Callback class WeightsSaver(Callback): def __init__(self, model, N): self.model = model self.N = N self.epoch = 0
from keras.callbacks import Callback
class WeightsSaver(Callback):
def __init__(self, model, N):
self.model = model
self.N = N
self.epoch = 0
def on_batch_end(self, epoch, logs={}):
if self.epoch % self.N == 0:
name = 'weights%08d.h5' % self.epoch
self.model.save_weights(name)
self.epoch += 1
然后将其添加到fit调用中:每5个历元保存一次重量:
model.fit(X_train, Y_train, callbacks=[WeightsSaver(model, 5)])
您不需要为回调传递模型。它已经可以通过超级链接访问模型。所以删除
\uuuu init\uuuu(…,model,…)
参数和self.model=model
。您应该能够通过self.model
访问当前模型。您还在每个批处理结束时保存它,这不是您想要的,您可能希望它在批处理结束时
但在任何情况下,你所做的事情都可以通过天真来完成。你不需要写一个自定义的。你可以这样使用它
mc = keras.callbacks.ModelCheckpoint('weights{epoch:08d}.h5',
save_weights_only=True, period=5)
model.fit(X_train, Y_train, callbacks=[mc])
您应该在\u epoch\u端实现,而不是在\u batch\u端实现。而且将模型作为\uuuu init\uuuu
的参数传递也是多余的
from keras.callbacks import Callback
class WeightsSaver(Callback):
def __init__(self, N):
self.N = N
self.epoch = 0
def on_epoch_end(self, epoch, logs={}):
if self.epoch % self.N == 0:
name = 'weights%08d.h5' % self.epoch
self.model.save_weights(name)
self.epoch += 1
谢谢你的回复,效果很好:)这正是我想要的。谢谢@gilas_BELHADJ:)