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。版本别乱选,用我推荐的组合,十分钟就能搞定。下一章咱们开始真正的模型转换实战。