Python 3.x 从Tensorflow Keras检查点重新加载最佳权重

Python 3.x 从Tensorflow Keras检查点重新加载最佳权重,python-3.x,tensorflow,machine-learning,keras,deep-learning,Python 3.x,Tensorflow,Machine Learning,Keras,Deep Learning,训练结束后,是否有方法从某个历元重新加载权重,或从由ModelCheckpoint创建的模型检查点文件重新加载最佳权重 我已经训练了10个历元,并且创建了一个检查点,只在每个历元之后保存重量。最后一个历元的val_分类精度略低于第5个历元。我知道我应该设置save\u best\u only=True,但我没有设置 那么现在,有没有办法从最佳历元或历元数5中获得权重 此外,ModelCheckpoint是否会覆盖中每个历元之后的权重 检查点文件 我的选择是什么?提前谢谢你的帮助 以下是我的实

训练结束后,是否有方法从某个历元重新加载权重,或从由
ModelCheckpoint
创建的模型检查点文件重新加载最佳权重

我已经训练了10个历元,并且创建了一个检查点,只在每个历元之后保存重量。最后一个历元的val_分类精度略低于第5个历元。我知道我应该设置
save\u best\u only=True
,但我没有设置

  • 那么现在,有没有办法从最佳历元或历元数5中获得权重
  • 此外,
    ModelCheckpoint
    是否会覆盖中每个历元之后的权重 检查点文件
我的选择是什么?提前谢谢你的帮助

以下是我的实施:

checkpoint_path = 'saved_model/cp.ckpt'
checkpoint_dir = os.path.dirname(checkpoint_path)
print(checkpoint_dir)

lstm_model.fit(X_train_seq_pad, y_train_cat,
               epochs=100,
               validation_data=(X_val_seq_pad, y_val_cat),
               callbacks=[callbacks.EarlyStopping(monitor='val_loss', patience=3),
                          callbacks.ModelCheckpoint(filepath=checkpoint_path,
                                                    save_weights_only=True,
                                                    verbose=1)])

如果
文件路径
不包含像
{epoch}
这样的格式选项,则每个新的更好的模型将覆盖
文件路径
。在您的情况下,这就是为什么您无法在特定的时间段(例如,时间段5)获取权重


但是,这里的选项是在培训期间在
ModelCheckpoint
回调中选择格式化选项。比如

tf.keras.callbacks.ModelCheckpoint(
                     filepath='model.{epoch:02d}-{val_loss:.4f}.h5', 
                     save_freq='epoch', verbose=1, monitor='val_loss', 
                     save_weights_only=True, save_best_only=False
                 )   
这将以不同但方便的方式在每个历元保存模型重量(采用
.h5
格式)。此外,如果我们选择
save_best_only
True
,它将以同样的方式保存最佳权重


代码示例

这里有一个端到端的工作示例供参考。我们将使用一个格式化选项以方便的方式保存每个历元的模型权重,该选项将定义
filepath
参数,如下所示:

img = tf.random.normal([20, 32], 0, 1, tf.float32)
tar = np.random.randint(2, size=(20, 1))

model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(10, input_dim = 32, activation= 'relu'))
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))

callback_list = [
       tf.keras.callbacks.ModelCheckpoint(
            filepath='model.{epoch:02d}-{val_loss:.4f}.h5', 
            save_freq='epoch', verbose=1, monitor='val_loss', 
            save_weights_only=True, save_best_only=False
       )         
]
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(img, tar, epochs=5, verbose=2, validation_split=0.2,
          callbacks=callback_list)
它将在每个历元保存模型权重。我会在我的本地磁盘上找到所有重量

# model.epoch_number_score.h5
model.01-0.8022.h5
model.02-0.8014.h5
model.03-0.8005.h5
model.04-0.7997.h5
model.05-0.7989.h5
但是,请注意,我使用了
save\u best\u only=False
,但是如果我们将其设置为
True
,则只能以相同的方式获得最佳权重。大概是这样的:

# model.epoch_number_score.h5
model.01-0.8022.h5
model.03-0.8005.h5
model.05-0.7989.h5

嘿,非常感谢你简洁的解释。是的,我意识到,
ModelCheckpoint
在阅读文档后将覆盖权重,因此提供命名模式是一种很好的方法,可以避开它并保留训练权重的历史记录。这非常有帮助,我喜欢你在这里建议的命名模式。很高兴能提供帮助。:)