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
在阅读文档后将覆盖权重,因此提供命名模式是一种很好的方法,可以避开它并保留训练权重的历史记录。这非常有帮助,我喜欢你在这里建议的命名模式。很高兴能提供帮助。:)