Tensorflow2保存和加载模型

1、model.save() and model.load()

此种方法可保存模型的结构、参数等内容。加载模型后无需设置即可使用!

保存模型:

python 复制代码
model.save('my_model.h5')

加载模型:

python 复制代码
# 加载整个模型
loaded_model = tf.keras.models.load_model('my_model.h5')

注意,创建的模型不能使用自定义的loss函数等方法,否则导入时会出错!

示例:

python 复制代码
model_file = "data/model/multi_labels_model.h5"    # 模型文件路径
def model_handle(x_train, y_train):
    if os.path.exists(model_file):
        print("---load the model---")
        model = tf.keras.models.load_model(model_file) # 导入已存在的模型
    else:
        # 模型构建
        model = tf.keras.Sequential([
            tf.keras.layers.LSTM(128),
            tf.keras.layers.Dense(class_num, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2())
        ])
        # 编译模型,不能使用自定义函数方法,否则导入模型会有问题
        model.compile(loss="BinaryCrossentropy", optimizer='adam', metrics=['accuracy'])
        
        history = model.fit(x_train, y_train, epochs=epoch_num, batch_size=1, verbose=1, 
                            callbacks=[PrintPredictionsCallback(x_train, y_train)])

        model.summary()
        model.save(model_file)
    return model

2、model.save_weight() and model.load_weight()

此方法只保存和加载模型的权重。

保存权重:

python 复制代码
# 只保存权重
model.save_weights('my_model_weights.h5')

加载权重:

python 复制代码
# 创建一个新的模型实例(确保架构与原始模型相同)
new_model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(10, activation='relu', input_shape=(32,)),
    tf.keras.layers.Dense(1)
])
# new_model.build(input_shape=x_train.shape) # 如果模型创建时没有规定input_shape,需要创建
# 加载权重到新模型
new_model.load_weights('my_model_weights.h5')

此方法的模型可以使用自定义的函数方法。

注意:以H5格式加载子类模型的参数时,需要提前建立模型,规定输入网络的shape,否则会报错!

python 复制代码
ValueError: Unable to load weights saved in HDF5 format into a subclassed Model which has not created its variables yet. Call the Model first, then load the weights.

示例:

python 复制代码
def model_handle(x_train, y_train):
    # 模型构建,多分类的激活函数使用sigmoid 或 softmax
    model = tf.keras.Sequential([
        tf.keras.layers.LSTM(128),
        tf.keras.layers.Dense(class_num, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2())
    ])
    if os.path.exists(model_file):
        print("-----load model weights-----")
        model.build(input_shape=x_train.shape)  # 以H5格式加载子类模型的参数时,需要提前建立模型,规定输入网络的shape,否则会报错
        model.load_weights(model_file)
    else:
        # 编译模型,使用自定义loss函数
        model.compile(loss=custom_loss, optimizer='adam', metrics=['accuracy'])
        # model.compile(loss="BinaryCrossentropy", optimizer='adam', metrics=['accuracy'])

        history = model.fit(x_train, y_train, epochs=epoch_num, batch_size=1, verbose=1, 
                            callbacks=[PrintPredictionsCallback(x_train, y_train)])

        model.summary()
        model.save_weights(model_file)

    return model

3、model.checkpoint

主要是用于模型的断点续训。用法参考如下:

python 复制代码
checkpoint_save_path = "./checkpoint/my_checkpoint.ckpt"

if os.path.exists(checkpoint_save_path + '.index'):
    print('-------------load the model-----------------')
    model.load_weights(checkpoint_save_path)

cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_save_path,
                                                 save_weights_only=True,
                                                 save_best_only=True,
                                                 monitor='val_loss')

history = model.fit(x_train, y_train, batch_size=64, epochs=50, validation_data=(x_test, y_test), validation_freq=1,
                    callbacks=[cp_callback])

model.summary()
相关推荐
hsg778 分钟前
简述:torchgeo
人工智能·深度学习
程序媛徐师姐15 分钟前
Python基于深度学习的手写输入识别系统【附源码、文档说明】
python·深度学习·python深度学习·手写输入识别系统·python手写输入识别系统·python手写输入识别·深度学习手写输入识别
思绪无限16 分钟前
YOLOv5至YOLOv12升级:个人防具检测系统的设计与实现(完整代码+界面+数据集项目)
深度学习·yolo·目标检测·yolov12·yolo全家桶·个人防具检测
菱玖1 小时前
Transformer 架构详解
人工智能·深度学习·transformer
初圣魔门首席弟子1 小时前
深度学习 axis的问题 shape = (axis=0, axis=1)
深度学习
SimpleLearingAI1 小时前
RMSNorm:大模型的隐秘功臣?
人工智能·深度学习
郝学胜-神的一滴1 小时前
神经网络参数初始化:从梯度失控到模型收敛的核心密码
人工智能·pytorch·深度学习·神经网络·机器学习·软件构建·软件设计
AC17801 小时前
深入浅出 PID 算法:原理、实现与应用实战
人工智能·算法·机器学习
Mr数据杨1 小时前
面部表情识别在心理健康辅助评估中的应用总结
机器学习·数据分析·kaggle
li星野1 小时前
《零基础搞懂神经网络 & 手写AI:从神经元公式到PyTorch实战》
人工智能·深度学习·神经网络