请求提供Keras每轮训练后保存完整模型的回调示例
Keras每轮训练后保存完整可运行模型的示例
没问题!我明白你要的是每轮训练后保存完整可直接运行的模型,而不只是权重——毕竟只存权重的话还要重新搭建模型结构、编译,确实麻烦。下面是一个简洁的Keras示例,完全满足你的需求:
完整代码示例
import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense from tensorflow.keras.callbacks import ModelCheckpoint # 1. 构建基础模型 model = Sequential([ Dense(64, activation='relu', input_shape=(784,)), Dense(10, activation='softmax') ]) model.compile( optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'] ) # 2. 准备示例数据集(用MNIST为例) (x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data() # 预处理:展平+归一化 x_train = x_train.reshape(-1, 784).astype('float32') / 255.0 x_test = x_test.reshape(-1, 784).astype('float32') / 255.0 # 3. 定义关键的ModelCheckpoint回调 checkpoint_callback = ModelCheckpoint( filepath='full_model_epoch_{epoch:02d}', # 文件名包含epoch编号,避免覆盖 save_weights_only=False, # 核心参数:设为False才会保存完整模型(结构+权重+优化器状态) save_best_only=False, # 每轮都保存,而不是只保留最优模型 save_format='tf' # 可选'tf'(推荐,TensorFlow原生格式)或'h5'(HDF5格式) ) # 4. 启动训练,传入回调 model.fit( x_train, y_train, epochs=5, batch_size=32, validation_split=0.1, callbacks=[checkpoint_callback] )
关键说明
save_weights_only=False:这是实现完整模型保存的核心,设置为False时,Keras会保存模型结构、权重、优化器状态、编译配置的全部内容,加载后无需重新编译即可直接使用。filepath中的{epoch:02d}:会自动替换为当前训练的epoch编号(比如full_model_epoch_01、full_model_epoch_02),确保每轮的模型都独立保存,不会被覆盖。- 保存格式选择:
tf格式:TensorFlow的原生SavedModel格式,支持跨平台部署、模型扩展等更多特性,推荐使用。h5格式:传统的HDF5文件格式,文件更紧凑,适合简单场景(只需把filepath改成full_model_epoch_{epoch:02d}.h5即可)。
加载保存的模型示例
训练完成后,你可以随时加载任意一轮的完整模型:
# 加载第3轮训练后的模型 loaded_model = tf.keras.models.load_model('full_model_epoch_03') # 直接用加载的模型进行评估或预测 test_loss, test_acc = loaded_model.evaluate(x_test, y_test) print(f"测试集准确率:{test_acc:.4f}")
内容的提问来源于stack exchange,提问作者I_Play_With_Data
相关产品推荐
相关产品推荐

