Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在每N个纪元结束时保存模型权重_Python_Tensorflow_Callback_Keras - Fatal编程技术网

Python 在每N个纪元结束时保存模型权重

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

我正在训练一个神经网络,并希望每N个历元保存一个预测阶段的模型权重。我提出了这个代码草案,它的灵感来自@grovina的回应。请你提些建议好吗? 提前谢谢

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:)