tf.keras.callbacks.ModelCheckpoint 尽管在每个纪元后设置保存,回调总是被覆盖

tf.keras.callbacks.ModelCheckpoint Callback is always overwritten despite of setting saving after each epoch

我已经编译了一个模型,并在每个 epoch 之后传递了一个用于保存模型权重的回调。例如,如果我 运行 20 个 epoch,最后我将得到 20 个检查点模型。但看起来模型权重总是在每个时期后被覆盖,所以训练后我只有 1 个时期。这很奇怪,任何人都可以有任何理想来修复它吗? 这是我的代码:

checkpoint_filepath = './checkpoints2/checkpoint_default'
model_checkpoint_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_filepath, mode="auto", save_freq=1, save_weights_only=True)
model = Sequential()
model.add(LSTM(100, input_shape=(train_x.shape[1], train_x.shape[2]), return_sequences=True))
model.add(LSTM(100, input_shape=(train_x.shape[1], train_x.shape[2])))
model.add(Dense(1))
model.compile(loss='mae', optimizer='adam')
# fit network
history = model.fit(train_x, train_y, epochs=22, validation_data=(val_x, val_y), batch_size=16, verbose=2, shuffle=False, callbacks=[model_checkpoint_callback])
plt.plot(history.history['loss'], label='train')
plt.plot(history.history['val_loss'], label='test')
plt.legend()
plt.show()

在上面的例子中,我设置了每 1 个 epoch 后保存,并训练 22 个 epoch。所以我应该在 运行ning 之后得到 22 个模型检查点。但实际上,在 运行ning 之后,我在 checkpoints2 目录中只有 3 个文件:checkpointcheckpoint_default.indexcheckpoint_default.data-00000-of-00001。我该如何解决?请帮忙

我正在使用没有 gpu 的 tensorflow 2.7.0

可能是因为您在模型检查点回调中设置了相同的更新权重路径的保存位置。例如,您可能需要使用如下设置:

from tensorflow.keras import callbacks

callbacks.ModelCheckpoint(
     filepath='model.{epoch:02d}-{val_loss:.4f}.h5', 
     save_freq='epoch', verbose=1, monitor='val_loss', 
     save_weights_only=True, 
)         

此外,您可以查看这些详细信息