每10个时间段tensorflow.keras v2保存模型

Nag*_*S N 5 python deep-learning keras tf.keras tensorflow2.0

我正在使用在tensorflow v2中定义为子模块的keras。我正在使用fit_generator()方法训练模型。我想每10个时间保存一次模型。我该如何实现?

在Keras(不是tf的子模块)中,我可以给出ModelCheckpoint(model_savepath,period=10)。但在TF V2,他们已经改变了这ModelCheckpoint(model_savepath, save_freq)地方save_freq'epoch'在这种情况下,模型保存每个时间段。如果save_freq为整数,则在处理了许多样本后将保存模型。但我希望在10个时代之后。我该如何实现?

blu*_*ers 17

使用tf.keras.callbacks.ModelCheckpointusesave_freq='epoch'并传递一个额外的参数period=10

虽然这在官方文档中没有记录,但这就是这样做的方法(注意它记录了你可以通过period,只是没有解释它的作用)。

  • 我收到以下警告:`警告:tensorflow:'period' 参数已弃用。请使用“save_freq”来指定所见样本数量的频率。因此,我猜这个功能很快就会消失。在这种情况下,我怎样才能实现这一目标呢? (3认同)
  • 我相信唯一的选择是计算每个时期的示例数量,并将该整数传递给“save_freq”乘以您想要的保存间隔的时期数 (2认同)
  • 我和@NagabhushanSN 有同样的问题。我计算了每个时期的样本数来计算样本数,之后我想保存模型,但它似乎不起作用。批量大小=64,对于测试用例,我每个时期使用 10 个步骤。如果我想每 3 个 epoch 保存一次模型,则样本数为 64*10*3=1920。我将其用于 sav_freq 但输出显示模型保存在纪元 1、纪元 2、纪元 9、纪元 11、纪元 14 上并且仍在运行。无法理解它。`period` 选项似乎工作正常,但有消息称它将被弃用。 (2认同)

小智 5

显式计算每个时期的批次数量对我有用。

BATCH_SIZE = 20
STEPS_PER_EPOCH = train_labels.size / BATCH_SIZE
SAVE_PERIOD = 10

# Create a callback that saves the model's weights every 10 epochs
cp_callback = tf.keras.callbacks.ModelCheckpoint(
    filepath=checkpoint_path, 
    verbose=1, 
    save_weights_only=True,
    save_freq= int(SAVE_PERIOD * STEPS_PER_EPOCH))

# Train the model with the new callback
model.fit(train_images, 
          train_labels,
          batch_size=BATCH_SIZE,
          steps_per_epoch=STEPS_PER_EPOCH,
          epochs=50, 
          callbacks=[cp_callback],
          validation_data=(test_images,test_labels),
          verbose=0)
Run Code Online (Sandbox Code Playgroud)