训练好模型只是第一步,真正让它落地发挥作用,还得靠部署。今天就来聊聊TensorFlow模型部署的全流程——从保存、加载到转换,每一步怎么操作、注意什么,一次性理清。
一、模型保存
在TensorFlow里,保存模型有两种主流方式:Sa vedModel格式和HDF5格式。两者各有侧重,根据场景灵活选用就好。
(一)Sa vedModel 格式
Sa vedModel是TensorFlow官方推荐的一种完整保存方案,模型结构、权重、计算图全打包在一起,部署和迁移时非常方便。
1. 保存模型
以下是构建、编译、训练并保存为Sa vedModel的代码示例:
# 构建模型
model = tf.keras.Sequential([
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(10)
])
# 编译模型
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
# 训练模型
model.fit(train_images, train_labels, epochs=5)
# 保存模型
model.sa ve("sa ved_model")
2. 加载模型
后续使用时,一行代码就能把模型重新加载回来:
loaded_model = tf.keras.models.load_model("sa ved_model")
(二)HDF5 格式
HDF5格式更轻量,适合只保存权重和结构,常用于快速保存和恢复。
1. 保存模型
需要分别保存权重和结构:
# 保存模型权重
model.sa ve_weights("model_weights.h5")
# 保存模型结构
with open("model_architecture.json", "w") as f:
f.write(model.to_json())
2. 加载模型
加载时也分两步走:
# 加载模型权重
model.load_weights("model_weights.h5")
# 加载模型结构
with open("model_architecture.json", "r") as f:
model = tf.keras.models.model_from_json(f.read())
两种方式各有适用场景——Sa vedModel适合完整部署和跨环境迁移,HDF5更灵活,适合只更新权重的场景。根据实际需求选对了,后续部署会省心很多。
二、模型加载
模型加载就是把训练好的模型读进内存,然后做推理或其它操作。下面一步步来。
(一)准备工作
确保TensorFlow和必要库已安装,然后看具体步骤。
(二)具体步骤
1. 导入需要的库
import tensorflow as tf
2. 定义模型文件的路径
假设模型文件名为model.pb,路径为/path/to/model:
model_path = '/path/to/model/model.pb'
3. 加载模型
with tf.gfile.FastGFile(model_path, 'rb') as f:
graph_def = tf.GraphDef()
graph_def.ParseFromString(f.read())
tf.import_graph_def(graph_def, name='')
4. 创建会话并进行预测
创建会话后,用张量名称获取输入输出,执行预测。注意将input_tensor_name和output_tensor_name替换为实际名称,input_data也要预处理。
with tf.Session() as sess:
input_tensor = sess.graph.get_tensor_by_name('input_tensor_name:0') # 替换为你的输入张量名称
output_tensor = sess.graph.get_tensor_by_name('output_tensor_name:0') # 替换为你的输出张量名称
# 输入数据预处理
input_data = # 准备输入数据
# 进行预测
output_data = sess.run(output_tensor, feed_dict={input_tensor: input_data})
# 输出预测结果
print(output_data)
这样加载完成后,模型就可以在线上线提供服务了。
三、模型转换
很多时候,模型需要部署到不同的平台——移动端、浏览器、嵌入式设备等。这时就需要做格式转换。常见的转换目标有TensorFlow Lite、TensorFlow.js、ONNX等。这里以转换为TensorFlow Lite为例详细展开。
(一)安装 TensorFlow Lite Converter
pip install tensorflow
pip install tflite
(二)转换模型
假设你已经有一个Sa vedModel格式的训练好的模型,在sa ved_model_dir文件夹下。用下面的代码就能转成.tflite文件:
import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_sa ved_model(sa ved_model_dir)
tflite_model = converter.convert()
with open('model.tflite', 'wb') as f:
f.write(tflite_model)
(三)部署模型
转换完成后,就可以把.tflite模型部署到移动设备或嵌入式设备上。使用TensorFlow Lite提供的库加载并推理:
import tensorflow as tf
interpreter = tf.lite.Interpreter(model_path="model.tflite")
interpreter.allocate_tensors()
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
# 推理
input_data = ...
interpreter.set_tensor(input_details[0]['index'], input_data)
interpreter.invoke()
output_data = interpreter.get_tensor(output_details[0]['index'])
TensorFlow Lite让在终端设备运行深度学习模型变得非常方便——工具链成熟、API简洁,只需几步就能把模型部署到实际场景中。
从保存到加载再到转换部署,整条链路打通后,模型才真正具备生产力。希望这篇文章能帮你快速上手TensorFlow部署流程,少踩坑,多出活儿。
