3.9 模型保存与加载


文档摘要

3.9 模型保存与加载 TensorFlow Keras 高级 API:3.9 模型保存与加载 模型保存方式 Keras 提供了以下几种主要的模型保存方式: 保存整个模型( / ): 将模型的结构、权重、优化器状态以及训练配置(损失函数、优化器等)完整地保存到一个文件中。这是最常用的保存方式,可以方便地恢复模型的完整状态。 仅保存模型权重( ): 只保存模型的权重参数,不包含模型的结构和配置信息。这种方式适用于需要在不同模型结构中复用权重,或者手动构建模型结构的情况。 保存为 SavedModel 格式: TensorFlow 的通用模型保存格式,适用于跨平台部署,支持 TensorFlow Serving、TensorFlow Lite 等。

3.9 模型保存与加载

TensorFlow Keras 高级 API:3.9 模型保存与加载

1. 模型保存方式

Keras 提供了以下几种主要的模型保存方式:

  • 保存整个模型(save()/tf.keras.models.save_model()): 将模型的结构、权重、优化器状态以及训练配置(损失函数、优化器等)完整地保存到一个文件中。这是最常用的保存方式,可以方便地恢复模型的完整状态。

  • 仅保存模型权重(save_weights()): 只保存模型的权重参数,不包含模型的结构和配置信息。这种方式适用于需要在不同模型结构中复用权重,或者手动构建模型结构的情况。

  • 保存为 SavedModel 格式: TensorFlow 的通用模型保存格式,适用于跨平台部署,支持 TensorFlow Serving、TensorFlow Lite 等。

  • 保存为 HDF5 格式(.h5): 一种常用的文件格式,Keras 默认使用 HDF5 格式保存整个模型。

2. 保存整个模型

2.1 使用 model.save()

这是最简单、最常用的保存模型的方法。它将模型的结构、权重、优化器状态等所有信息保存到一个文件中。

代码示例:

import tensorflow as tf # 构建一个简单的模型 model = tf.keras.Sequential([ tf.keras.layers.Dense(10, activation='relu', input_shape=(784,)), tf.keras.layers.Dense(1) ]) model.compile(optimizer='adam', loss='mse', metrics=['mae']) # 训练模型 (这里使用随机数据模拟训练) import numpy as np x_train = np.random.random((100, 784)) y_train = np.random.random((100, 1)) model.fit(x_train, y_train, epochs=2) # 保存整个模型到文件 model.save('my_model.keras') # 推荐使用 .keras 扩展名

代码详解:

  • model.save('my_model.keras') 将整个模型保存到名为 my_model.keras 的文件中。

  • Keras 3.0 及以后推荐使用 .keras 扩展名,之前的版本常用 .h5

  • 保存的文件包含了模型的结构、权重、优化器状态等所有信息。

2.2 使用 tf.keras.models.save_model()

tf.keras.models.save_model() 是 TensorFlow 提供的更底层的保存模型函数,功能与 model.save() 类似。

代码示例:

import tensorflow as tf # 构建一个简单的模型 model = tf.keras.Sequential([ tf.keras.layers.Dense(10, activation='relu', input_shape=(784,)), tf.keras.layers.Dense(1) ]) model.compile(optimizer='adam', loss='mse', metrics=['mae']) # 训练模型 (这里使用随机数据模拟训练) import numpy as np x_train = np.random.random((100, 784)) y_train = np.random.random((100, 1)) model.fit(x_train, y_train, epochs=2) # 保存整个模型到文件 tf.keras.models.save_model(model, 'my_model_tf.keras')

代码详解:

  • tf.keras.models.save_model(model, 'my_model_tf.keras') 将模型 model 保存到名为 my_model_tf.keras 的文件中。

3. 加载整个模型

3.1 使用 tf.keras.models.load_model()

使用 tf.keras.models.load_model() 可以从保存的文件中加载整个模型。

代码示例:

import tensorflow as tf # 加载模型 loaded_model = tf.keras.models.load_model('my_model.keras') # 验证模型 loaded_model.summary() # 使用加载的模型进行预测 import numpy as np x_test = np.random.random((10, 784)) predictions = loaded_model.predict(x_test) print(predictions)

代码详解:

  • loaded_model = tf.keras.models.load_model('my_model.keras')my_model.keras 文件中加载模型。

  • loaded_model.summary() 可以查看加载的模型的结构。

  • 加载的模型可以直接用于预测。

4. 仅保存和加载模型权重

4.1 保存模型权重

使用 model.save_weights() 可以只保存模型的权重参数。

代码示例:

import tensorflow as tf # 构建一个简单的模型 model = tf.keras.Sequential([ tf.keras.layers.Dense(10, activation='relu', input_shape=(784,)), tf.keras.layers.Dense(1) ]) model.compile(optimizer='adam', loss='mse', metrics=['mae']) # 训练模型 (这里使用随机数据模拟训练) import numpy as np x_train = np.random.random((100, 784)) y_train = np.random.random((100, 1)) model.fit(x_train, y_train, epochs=2) # 保存模型权重到文件 model.save_weights('my_model_weights.h5')

代码详解:

  • model.save_weights('my_model_weights.h5') 将模型的权重保存到名为 my_model_weights.h5 的文件中。

  • 这里使用 .h5 作为扩展名,因为权重文件通常以 HDF5 格式保存。

4.2 加载模型权重

加载模型权重需要先构建一个与保存权重时结构相同的模型,然后使用 model.load_weights() 加载权重。

代码示例:

import tensorflow as tf # 构建与保存权重时结构相同的模型 model = tf.keras.Sequential([ tf.keras.layers.Dense(10, activation='relu', input_shape=(784,)), tf.keras.layers.Dense(1) ]) # 编译模型 (必须在加载权重之前编译模型) model.compile(optimizer='adam', loss='mse', metrics=['mae']) # 加载模型权重 model.load_weights('my_model_weights.h5') # 验证模型 model.summary() # 使用加载的模型进行预测 import numpy as np x_test = np.random.random((10, 784)) predictions = model.predict(x_test) print(predictions)

代码详解:

  • 首先需要构建一个与保存权重时结构完全相同的模型。

  • 必须在加载权重之前编译模型,否则会报错。

  • model.load_weights('my_model_weights.h5')my_model_weights.h5 文件中加载权重。

  • 加载权重后,模型就可以用于预测了。

5. 保存为 SavedModel 格式

SavedModel 是一种 TensorFlow 的通用模型保存格式,适用于跨平台部署,支持 TensorFlow Serving、TensorFlow Lite 等。

代码示例:

import tensorflow as tf # 构建一个简单的模型 model = tf.keras.Sequential([ tf.keras.layers.Dense(10, activation='relu', input_shape=(784,)), tf.keras.layers.Dense(1) ]) model.compile(optimizer='adam', loss='mse', metrics=['mae']) # 训练模型 (这里使用随机数据模拟训练) import numpy as np x_train = np.random.random((100, 784)) y_train = np.random.random((100, 1)) model.fit(x_train, y_train, epochs=2) # 保存模型为 SavedModel 格式 model.save('my_saved_model', save_format='tf')

代码详解:

  • model.save('my_saved_model', save_format='tf') 将模型保存为 SavedModel 格式,保存在名为 my_saved_model 的目录下。

  • save_format='tf' 指定保存格式为 TensorFlow 的 SavedModel 格式。

加载 SavedModel 格式的模型:

import tensorflow as tf # 加载 SavedModel 格式的模型 loaded_model = tf.keras.models.load_model('my_saved_model') # 验证模型 loaded_model.summary() # 使用加载的模型进行预测 import numpy as np x_test = np.random.random((10, 784)) predictions = loaded_model.predict(x_test) print(predictions)

6. 模型保存与加载流程图

可以使用 Mermaid 图表来可视化模型保存与加载的流程:

图表解释:

  1. 训练模型: 首先需要训练一个模型。

  2. 保存模型: 可以选择保存整个模型或仅保存权重。

  3. 保存文件: 保存整个模型会生成包含模型结构、权重和配置的文件,例如 .keras.h5 或 SavedModel 格式的目录。仅保存权重会生成权重文件,通常是 .h5 格式。

  4. 加载模型: 加载模型的方式取决于保存的方式。

  5. 构建相同结构的模型: 如果只保存了权重,需要先构建一个与保存权重时结构相同的模型。

  6. 加载权重: 将权重加载到构建的模型中。

  7. 使用加载的模型进行预测/评估: 加载后的模型可以用于预测或评估。

7. 总结

Keras 提供了多种灵活的模型保存与加载方式,可以根据实际需求选择合适的方法。

  • model.save() / tf.keras.models.save_model(): 保存整个模型,方便快捷,推荐使用。

  • model.save_weights(): 只保存权重,适用于需要在不同模型结构中复用权重的情况。

  • SavedModel 格式: 适用于跨平台部署。

在实际应用中,建议使用 model.save()tf.keras.models.save_model() 保存整个模型,因为它可以保存模型的完整状态,方便后续使用。如果需要灵活地控制模型的结构和权重,可以选择只保存权重的方式。

希望本文能够帮助你更好地理解和使用 Keras 的模型保存与加载功能。


发布者: 作者: 转发
评论区 (0)
U