2、环境搭建:安装 TensorFlow、配置 Android/iOS 开发环境、安装 TFLite 解释器
好,咱们直接进入正题。环境搭建这事儿,说难不难,说简单吧,坑也不少。我见过太多人卡在第一步,装了半天跑不起来,最后发现是版本没对上。所以这一章,我带你一步步把地基打牢。
2.1 安装 TensorFlow:选对版本是关键
先装 TensorFlow。这里有个原则:别装最新的,装最稳的。我个人的习惯是,先看看 TFLite 的官方文档,它支持哪个版本,我就装哪个。比如现在 TFLite 2.x 系列很成熟,那就装 2.13 或 2.14。
为什么?因为 TFLite 的转换器跟 TensorFlow 主库是绑定的。版本不对,转换模型时会报一些莫名其妙的错。我曾经有一次,为了尝鲜装了 2.16,结果 TFLite 转换器死活不认,折腾了两天,最后老老实实降级。
安装命令很简单,用 pip:
# 安装 CPU 版本(开发调试用)
pip install tensorflow==2.14.0
# 如果你有 NVIDIA GPU,装 GPU 版本
pip install tensorflow-gpu==2.14.0
嗯,这里要注意:GPU 版本需要 CUDA 和 cuDNN 配合。具体版本对应关系,去 NVIDIA 官网查一下,别凭感觉装。我建议新手先用 CPU 版本,等模型跑通了再考虑 GPU 加速。
python -c "import tensorflow as tf; print(tf.__version__)",确认版本号。如果没报错,恭喜你,第一步过了。
2.2 配置 Android 开发环境:Android Studio + NDK
接下来是 Android。说白了,你要在手机上跑模型,就得有个 Android 开发环境。我推荐用 Android Studio,它集成了几乎所有东西。
步骤其实就三步:
- 下载 Android Studio:去官网下最新版,安装时记得勾选「Android SDK」和「Android Virtual Device」。
- 安装 NDK:TFLite 的 C++ 解释器需要 NDK 来编译。在 Android Studio 里,打开 SDK Manager,切到「SDK Tools」标签,勾选「NDK (Side by side)」和「CMake」。
- 配置 Gradle:在项目的
build.gradle里,加上 TFLite 的依赖。
依赖怎么写?看这里:
dependencies {
// TFLite 核心库
implementation 'org.tensorflow:tensorflow-lite:2.14.0'
// GPU 加速(可选)
implementation 'org.tensorflow:tensorflow-lite-gpu:2.14.0'
// 支持更多算子(可选)
implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:2.14.0'
}
我个人习惯是,先把核心库加上,跑通了再考虑 GPU 加速。因为 GPU 加速对某些模型不兼容,容易出问题。你想想看,如果一开始就全加上,出了问题你都不知道是哪个依赖的锅。
ndkVersion,结果编译时一直报错。后来发现,Android Studio 默认用的 NDK 版本跟 TFLite 不匹配。解决办法是在 build.gradle 里显式指定版本,比如 ndkVersion "25.2.9519653"。
2.3 配置 iOS 开发环境:Xcode + CocoaPods
iOS 这边,环境搭建相对简单,但有个前提:你得有台 Mac。Xcode 是必须的,去 App Store 下载就行。
然后,用 CocoaPods 管理 TFLite 依赖。如果你还没装 CocoaPods,先装一下:
sudo gem install cocoapods
接着,在项目目录下创建 Podfile,写入:
target 'YourAppTarget' do
use_frameworks!
pod 'TensorFlowLiteSwift', '~> 2.14.0'
# 如果需要 C++ API,用这个:
# pod 'TensorFlowLiteC', '~> 2.14.0'
end
然后执行 pod install。嗯,这里要注意:第一次 pod install 会下载很多东西,耐心等。我见过有人等不及直接关了终端,结果依赖没装全,后面编译报错。
装完后,用 .xcworkspace 文件打开项目,别用 .xcodeproj。这个坑我踩过,当时还纳闷怎么 pod 的库找不到,后来才发现是打开方式不对。
2.4 安装 TFLite 解释器:Python 和移动端两种方式
TFLite 解释器,说白了就是跑模型的引擎。它有两种形态:
- Python 解释器:用于开发调试,在 PC 上验证模型。
- 移动端解释器:集成到 Android/iOS App 里,真机运行。
Python 解释器最简单,装完 TensorFlow 就自带了。你试试:
import tensorflow as tf
# 加载一个 TFLite 模型
interpreter = tf.lite.Interpreter(model_path="model.tflite")
interpreter.allocate_tensors()
# 看看输入输出
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
print("输入形状:", input_details[0]['shape'])
print("输出形状:", output_details[0]['shape'])
能跑通,就说明解释器装好了。我个人习惯是,先用 Python 解释器跑一遍推理,确保模型没问题,再往移动端移植。这样能隔离问题——是模型的问题,还是环境的问题,一目了然。
移动端解释器呢,其实就是前面 Android 和 iOS 配置里加的那些依赖。它们会在编译时自动集成到 App 里,你不需要手动安装什么。
2.5 验证环境:跑一个最小示例
环境搭没搭好,跑个例子就知道了。我准备了一个最简单的模型——一个全连接网络,输入 1x4 的张量,输出 1x2 的张量。你把它转成 TFLite,然后在各端跑一下。
Python 端验证:
import tensorflow as tf
import numpy as np
# 创建一个简单模型
model = tf.keras.Sequential([
tf.keras.layers.Dense(2, input_shape=(4,), activation='softmax')
])
# 转成 TFLite
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
# 保存模型
with open('test_model.tflite', 'wb') as f:
f.write(tflite_model)
# 用解释器跑一下
interpreter = tf.lite.Interpreter(model_content=tflite_model)
interpreter.allocate_tensors()
input_data = np.array([[1.0, 2.0, 3.0, 4.0]], dtype=np.float32)
interpreter.set_tensor(interpreter.get_input_details()[0]['index'], input_data)
interpreter.invoke()
output = interpreter.get_tensor(interpreter.get_output_details()[0]['index'])
print("推理结果:", output)
如果输出是一个 1x2 的数组,比如 [[0.1, 0.9]],那就成了。Android 和 iOS 端的验证类似,只是把模型文件放到 assets 目录,然后用对应的 API 加载。
2.6 常见问题与解决
最后,列几个我遇到过的问题,你心里有个数:
| 问题 | 原因 | 解决办法 |
|---|---|---|
| pip 安装 TensorFlow 超时 | 网络问题 | 用国内镜像源,比如 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow |
| Android 编译报错:找不到 TFLite 库 | Gradle 依赖没加对 | 检查 build.gradle 里的依赖版本,确保跟 TensorFlow 版本一致 |
| iOS 运行时崩溃:模型加载失败 | 模型文件没加到 Bundle 里 | 在 Xcode 里把 .tflite 文件拖到项目,并勾选「Add to target」 |
Python 解释器报错:No module named 'tensorflow' |
没激活虚拟环境 | 检查当前 Python 环境,或者用 conda activate 切换 |
嗯,环境搭建就这些。说白了,就是装软件、配路径、加依赖。别怕麻烦,这一步做好了,后面写代码会顺畅很多。下一章,咱们开始讲模型转换——怎么把训练好的模型变成 TFLite 格式。