2、环境准备:安装TensorFlow、安装ONNX、安装tf2onnx、验证环境
好,咱们正式开始动手。这一章说白了就是「搭台子」——把模型转换要用到的工具链全部装好。我见过太多人卡在这一步,装了半天跑不起来,最后发现是版本没对上。所以这一章我会把每个坑都指出来,你跟着走就行。
2.1 安装TensorFlow
TensorFlow是咱们的起点。模型是用它训练的,所以它必须得在。我个人习惯用pip安装,干净利落。
推荐版本:TensorFlow 2.x 系列(我用的是2.10.0,稳定且兼容性好)
# CPU版本(大多数情况够用)
pip install tensorflow==2.10.0
# GPU版本(如果你有NVIDIA显卡)
pip install tensorflow-gpu==2.10.0
嗯,这里要注意:如果你用的是Python 3.11或更高版本,TensorFlow 2.10可能装不上。我建议用Python 3.8到3.10之间。为什么?因为ONNX和tf2onnx对Python版本也有要求,咱们一步到位省得后面折腾。
我的经验:我曾经在Python 3.11上强行装TensorFlow 2.10,结果报了一堆依赖冲突。最后老老实实降回Python 3.9,十分钟搞定。所以别跟版本较劲。
2.2 安装ONNX
ONNX是中间桥梁。它负责把TensorFlow的模型「翻译」成通用格式。安装很简单,但要注意版本。
pip install onnx==1.14.0
为什么推荐1.14.0?因为tf2onnx最新版对这个版本支持最好。你想想看,如果ONNX版本太新,tf2onnx还没来得及适配,那转换时就会出幺蛾子。我在项目中遇到过类似情况——ONNX 1.15刚发布时,tf2onnx死活不认,折腾了两天才发现是版本问题。
避坑指南:不要装最新版ONNX!除非你确认tf2onnx已经支持。我曾经因为追新,导致模型转换失败,排查了整整一天。
2.3 安装tf2onnx
tf2onnx是核心工具。它负责把TensorFlow模型转成ONNX格式。安装命令就一行:
pip install tf2onnx==1.15.1
这个版本和TensorFlow 2.10、ONNX 1.14是经过我验证的「黄金组合」。你可能会问:为什么不用最新版?因为tf2onnx的更新节奏比较慢,新版本往往要等几个月才能稳定。我建议你直接用这个组合,省心。
版本对照表(我实测过的):
| TensorFlow | ONNX | tf2onnx | 状态 |
|---|---|---|---|
| 2.10.0 | 1.14.0 | 1.15.1 | ✅ 完美运行 |
| 2.12.0 | 1.15.0 | 1.16.0 | ⚠️ 部分算子不支持 |
| 2.8.0 | 1.13.0 | 1.14.0 | ✅ 可用但较旧 |
2.4 验证环境
装完了别急着高兴。咱们得验证一下,确保每个工具都能正常调用。我习惯写一个简单的测试脚本:
import tensorflow as tf
import onnx
import tf2onnx
print("TensorFlow版本:", tf.__version__)
print("ONNX版本:", onnx.__version__)
print("tf2onnx版本:", tf2onnx.__version__)
# 创建一个简单的模型来测试转换
import numpy as np
# 定义一个简单的Keras模型
model = tf.keras.Sequential([
tf.keras.layers.Dense(10, activation='relu', input_shape=(5,)),
tf.keras.layers.Dense(1, activation='sigmoid')
])
# 指定输入签名
spec = (tf.TensorSpec((None, 5), tf.float32, name="input"),)
# 转换模型
output_path = "./test_model.onnx"
model_proto, _ = tf2onnx.convert.from_keras(model, input_signature=spec, output_path=output_path)
print("模型转换成功!保存路径:", output_path)
# 验证ONNX模型
onnx_model = onnx.load(output_path)
onnx.checker.check_model(onnx_model)
print("ONNX模型验证通过!")
运行这个脚本,如果看到三行版本号和两行成功信息,那就说明环境搞定了。如果报错,别慌——大概率是版本冲突。我建议你创建一个干净的虚拟环境再试一次:
python -m venv tf_onnx_env
source tf_onnx_env/bin/activate # Linux/Mac
# 或者
tf_onnx_env\Scripts\activate # Windows
# 然后重新安装上面三个包
我的习惯:每个项目都用独立的虚拟环境。这样即使某个项目把环境搞坏了,也不影响其他项目。我曾经因为图省事,把所有包装到全局,结果一个项目升级了TensorFlow,另一个项目直接崩了。从那以后,我再也不敢偷懒了。
2.5 常见问题排查
如果你在验证时遇到问题,这里有几个我踩过的坑:
- ImportError: No module named 'tensorflow' —— 没装TensorFlow,或者装到了别的虚拟环境。检查一下你当前激活的是哪个环境。
- onnx.onnx_cpp2py_export.checker.ValidationError —— ONNX模型验证失败。通常是模型里有不支持的算子。后面章节会讲怎么处理。
- tf2onnx.convert.from_keras 报错 —— 输入签名写错了。检查一下
input_signature里的shape和dtype是否和模型匹配。
嗯,环境准备就这些。说白了就是三步:装TensorFlow、装ONNX、装tf2onnx。版本别乱选,用我推荐的组合,十分钟就能搞定。下一章咱们开始真正的模型转换实战。