TensorFlow与PyTorch全面对比:深度学习框架选型与实战指南
2026/8/31 12:42:14 网站建设 项目流程

如果你正在纠结入门深度学习到底先学 TensorFlow 还是 PyTorch,这篇文章就是来解决这个问题的。不做空泛的概念对比,直接把两大框架的核心差异、安装方式、功能验证、接口能力和适用场景拆开讲清楚,最后给出一套明确的选择建议。

这次我们来看 TensorFlow 和 PyTorch 的完整对比。前者由 Google 开源,后者由 Meta 的 FAIR 团队推出,发展到现在已经不只是“学术用哪个、工业用哪个”这么简单。TensorFlow 2.x 生态完整,Keras 高层 API 对新手友好;PyTorch 调试直观,动态图机制让模型开发过程更接近原生 Python 思维。两个框架都在持续迭代,比如 TensorFlow 2.18 的安装方式、PyTorch 2.x 的编译加速,这些都会影响实际使用体验。

本文会带你完成下面的实操内容:在本地环境分别安装 TensorFlow 和 PyTorch,验证 GPU 是否可用,用最简单的手写数字识别模型跑通训练和推理流程,再对比模型导出、接口服务、批量任务处理等工程化能力。无论你是准备入门深度学习的新手,还是已经在做模型部署的开发者,这篇文章都可以直接收藏备用。

1. 核心能力速览

先给出一张快速对比表,把两个框架的关键规格列清楚。

能力项TensorFlowPyTorch
开发团队GoogleMeta FAIR
首个开源时间2015 年2016 年
默认计算图模式静态图优先,支持动态图(Eager Execution)动态图模式,支持 torch.compile 转为静态图加速
高层 APIKeras,官方集成PyTorch Lightning 等第三方库
调试体验早期需要 Session,2.x 默认 Eager,调试明显改善直接使用 Python 控制流,调试与普通脚本一致
GPU 支持CUDA、ROCm 等CUDA、ROCm 等
移动端 / 边缘部署TFLite、TF.js 生态成熟TorchScript、Torch Mobile,生态持续完善
服务化部署TensorFlow Serving、TFXTorchServe,配合 FastAPI 等方案
适合场景工业落地、移动端、大规模分布式训练、生产管线学术研究、算法原型、快速迭代、生成式模型
安装难度中等,版本与 CUDA 匹配需要留意中等,conda 安装相对省心
是否需要 GPU可选,CPU 可跑但训练慢可选,CPU 可跑但训练慢
批量任务支持,tf.data 管道能力很强支持,DataLoader 使用简单
推理接口SavedModel、TFLite、TF Serving 接口TorchScript、ONNX、TorchServe 接口

从这张表能看出,两个框架已经不是“谁比谁强”的问题,而是“谁更适合你的使用阶段”。TensorFlow 的强项在完整生产链路,PyTorch 的强项在研究和快速开发。实际选择需要结合项目场景来定。

2. 适用场景与使用边界

选择框架之前,先明确自己属于哪类用户,避免跟风选型。

2.1 TensorFlow 适合什么场景

TensorFlow 的优势集中在工程化和部署侧。如果你要做移动端 App 里的图像分类、目标检测,TFLite 能把模型压缩并部署到 Android 和 iOS,这条链路已经非常成熟。如果是服务端推理,TensorFlow Serving 支持模型版本管理、灰度发布和高并发请求,很多推荐系统、风控系统、广告 CTR 预估模型都用它。

另外,如果团队已经有一套 Java 或 Go 写的后端服务,想集成深度学习模型,TensorFlow Serving 提供了标准的 gRPC 和 RESTful API,接入成本比自建推理服务低很多。这也解释了为什么很多工业项目仍然选择 TensorFlow。

2.2 PyTorch 适合什么场景

PyTorch 当前在学术研究和算法工程师群体中占明显优势。大部分最新论文的官方开源代码都是 PyTorch 实现,生成式模型领域尤其明显。如果你要复现论文、跑新的模型结构、做实验对比,PyTorch 的社区资源最丰富。

PyTorch 的调试体验也适合教学和原型验证。训练循环自己控制,打印中间变量不需要特殊处理,出错时回溯和普通 Python 程序一样。对于刚入门深度学习的开发者,这种“所见即所得”的方式能减少很多挫败感。

2.3 使用边界与合规注意事项

本地方案涉及模型下载、数据集准备和模型部署时,需要留意合规边界。训练数据要确认版权和授权,尤其是人脸图像、语音数据、文本语料;部署到公网的服务要做好访问控制和数据脱敏;模型文件来源要可信,避免引入被篡改的权重文件。涉及人脸识别、语音合成、数字人生成等敏感能力时,必须有明确授权,不能拿未授权数据训练或测试。

3. 环境准备与前置条件

这两个框架的安装并不复杂,真正容易出问题的是 Python 版本、CUDA 版本、cuDNN 版本和框架版本之间的兼容关系。下面给出一套通用的环境准备检查清单。

3.1 硬件要求

  • CPU:支持 AVX 指令集的 x86_64 CPU 即可,ARM 平台如 Apple Silicon 也有对应版本,但部分算子可能不完全一致。
  • GPU:NVIDIA 显卡需要安装显卡驱动和 CUDA 工具包;AMD 显卡可以尝试 ROCm 版本;纯 CPU 环境也能安装和训练,只是大规模模型速度会慢很多。
  • 内存:16GB 起步比较稳妥,训练较大模型时建议 32GB 以上。
  • 磁盘:安装框架和基础依赖大约需要 10GB 到 20GB,模型文件和数据集另算,建议预留 50GB 以上。

3.2 软件环境

推荐使用 Anaconda 创建独立 Python 虚拟环境,避免不同项目之间的依赖冲突。

推荐环境组合:

  • Python 3.10 或 3.11
  • CUDA 11.8 或 12.x(按显卡驱动版本选择)
  • cuDNN 8.x 或 9.x(与 CUDA 版本匹配)
  • Anaconda 或 Miniconda

3.3 驱动检查

在命令行执行下面命令,确认 NVIDIA 显卡驱动状态:

nvidia-smi

如果命令不存在,需要先去 NVIDIA 官网安装对应显卡驱动。如果命令能正常输出,记录右上角的 CUDA Version,这是驱动支持的最高 CUDA 版本,安装框架时需要保证 CUDA 工具包版本不超过这个值。

3.4 Python 虚拟环境

创建并激活虚拟环境:

conda create -n dl_env python=3.10 -y conda activate dl_env

后续 TensorFlow 和 PyTorch 的安装都可以在这个环境中进行。推荐分开创建两个环境,避免两个框架的依赖互相影响:

conda create -n tf_env python=3.10 -y conda create -n torch_env python=3.10 -y

4. 安装部署与启动方式

两个框架都支持 pip 和 conda 安装方式。这里给出常用的安装命令和验证方法。

4.1 TensorFlow 安装

如果只需要 CPU 版本,直接安装官方稳定版:

pip install tensorflow

如果需要 GPU 版本,先确认本机 CUDA 版本,再选择对应安装方式。TensorFlow 2.18 及以后版本的安装方式变化较大,建议优先参考官方安装文档。典型命令如下:

# TensorFlow 2.18 示例,具体版本以官方发布为准 pip install tensorflow==2.18.*

如果使用 conda,可以执行:

conda install tensorflow-gpu

安装完成后验证:

python -c "import tensorflow as tf; print(tf.__version__)"

4.2 PyTorch 安装

PyTorch 官方提供了安装命令生成工具,可以根据操作系统、包管理工具和 CUDA 版本生成对应命令。

CPU 版本:

pip install torch torchvision torchaudio

GPU 版本示例(CUDA 12.1):

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

使用 conda 安装:

conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia

GPU 是否可用的验证方法:

python -c "import torch; print(torch.__version__); print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"

如果输出True和正确的显卡名称,说明 PyTorch GPU 环境配置成功。

4.3 常见启动问题预判

安装阶段最容易遇到三类问题:

第一类是 pip 下载速度慢,可以临时使用国内镜像源,但要注意镜像同步时效。

第二类是 CUDA 版本不匹配,表现为libcudart.solibcudnn.so找不到。此时需要卸载重装对应 CUDA 版本的框架包,或者在 conda 内安装匹配的 cudatoolkit。

第三类是显卡驱动过旧,表现为CUDA driver version is insufficient。这类问题需要升级显卡驱动,而不是重装框架。

5. 功能测试与效果验证

安装完成后,用一个经典的手写数字识别任务来验证两个框架的完整流程。这个任务在 MNIST 数据集上训练一个简单的卷积神经网络,能覆盖数据加载、模型定义、训练、评估、保存和推理的完整链路。

5.1 TensorFlow 手写数字识别

import tensorflow as tf from tensorflow.keras import layers, models # 1. 加载数据 (x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data() x_train = x_train.reshape(-1, 28, 28, 1).astype("float32") / 255.0 x_test = x_test.reshape(-1, 28, 28, 1).astype("float32") / 255.0 # 2. 定义模型 model = models.Sequential([ layers.Conv2D(32, (3, 3), activation="relu", input_shape=(28, 28, 1)), layers.MaxPooling2D((2, 2)), layers.Conv2D(64, (3, 3), activation="relu"), layers.MaxPooling2D((2, 2)), layers.Flatten(), layers.Dense(128, activation="relu"), layers.Dense(10, activation="softmax") ]) # 3. 编译模型 model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"]) # 4. 训练模型 model.fit(x_train, y_train, epochs=5, batch_size=128, validation_split=0.1) # 5. 评估模型 test_loss, test_acc = model.evaluate(x_test, y_test, verbose=0) print(f"Test accuracy: {test_acc:.4f}") # 6. 保存模型 model.save("mnist_tf.h5")

这段代码包含了 Keras 高层 API 的完整使用方式。训练 5 个 epoch 后,在测试集上的准确率通常能稳定在 99% 左右。整个流程代码量少、结构清晰,适合新手快速建立完整认知。

5.2 PyTorch 手写数字识别

import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader from torchvision import datasets, transforms # 1. 定义数据预处理 transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,)) ]) # 2. 加载数据 train_dataset = datasets.MNIST(root="./data", train=True, download=True, transform=transform) test_dataset = datasets.MNIST(root="./data", train=False, download=True, transform=transform) train_loader = DataLoader(train_dataset, batch_size=128, shuffle=True) test_loader = DataLoader(test_dataset, batch_size=128, shuffle=False) # 3. 定义模型 class CNN(nn.Module): def __init__(self): super().__init__() self.conv1 = nn.Conv2d(1, 32, 3) self.conv2 = nn.Conv2d(32, 64, 3) self.fc1 = nn.Linear(64 * 5 * 5, 128) self.fc2 = nn.Linear(128, 10) def forward(self, x): x = torch.relu(self.conv1(x)) x = torch.max_pool2d(x, 2) x = torch.relu(self.conv2(x)) x = torch.max_pool2d(x, 2) x = torch.flatten(x, 1) x = torch.relu(self.fc1(x)) x = self.fc2(x) return x model = CNN() # 4. 定义损失函数和优化器 criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.001) # 5. 训练循环 model.train() for epoch in range(5): for batch_idx, (data, target) in enumerate(train_loader): optimizer.zero_grad() output = model(data) loss = criterion(output, target) loss.backward() optimizer.step() if batch_idx % 200 == 0: print(f"Epoch {epoch}, Batch {batch_idx}, Loss {loss.item():.4f}") # 6. 评估 model.eval() correct = 0 total = 0 with torch.no_grad(): for data, target in test_loader: output = model(data) _, predicted = torch.max(output.data, 1) total += target.size(0) correct += (predicted == target).sum().item() print(f"Test accuracy: {100 * correct / total:.2f}%") # 7. 保存模型 torch.save(model.state_dict(), "mnist_torch.pth")

这段代码展示了 PyTorch 的典型写法:模型继承nn.Module,前向传播在forward方法中定义,训练循环由开发者完全控制。对比 TensorFlow 版本能明显感受到,PyTorch 的训练过程更像是在写一段普通的 Python 循环,每一步做什么都清清楚楚。

5.3 两者验证结果对比

从功能验证的角度看,两个框架的最终效果没有本质差别。真正的差异体现在使用体验上:

TensorFlow 的 Keras 高层 API 封装程度更高,几行代码就能完成训练。但如果需要自定义训练细节,比如特殊的学习率调整策略、分层冻结、自定义损失函数,反而需要绕开高层 API 才能实现。

PyTorch 没有强制性的高层封装,训练循环可以随心所欲调整,适合做研究实验。但这种自由度也意味着新手需要自己处理更多细节,比如model.train()model.eval()的切换、torch.no_grad()的使用。

5.4 简单对比测试的输入输出预期

在两个框架中分别跑通上面的代码,预期结果如下:

验证项TensorFlowPyTorch
输入数据MNIST 28x28 灰度图MNIST 28x28 灰度图
模型结构Conv2D + MaxPool + DenseConv2D + MaxPool + Linear
训练 Epoch55
测试准确率约 99%约 99%
输出模型文件mnist_tf.h5mnist_torch.pth

如果准确率明显低于 98%,优先检查数据归一化是否正确、学习率是否合理、卷积核尺寸是否与输入匹配。

5.5 推理验证

训练完成后再验证一次推理流程,确保模型文件可以被重新加载。

TensorFlow 推理:

import numpy as np import tensorflow as tf model = tf.keras.models.load_model("mnist_tf.h5") sample = x_test[0].reshape(1, 28, 28, 1) pred = model.predict(sample) print(np.argmax(pred))

PyTorch 推理:

import torch model = CNN() model.load_state_dict(torch.load("mnist_torch.pth")) model.eval() sample = torch.tensor(x_test[0]).unsqueeze(0) with torch.no_grad(): output = model(sample) print(torch.argmax(output, dim=1).item())

这里要注意 PyTorch 在加载模型前需要先实例化模型结构,然后调用load_state_dict。TensorFlow 的load_model会把结构和权重一起加载,使用上更省事。

6. 模型导出、接口 API 与批量任务

很多开发者的真实需求不是训练模型,而是把训练好的模型接入业务系统。这一部分涉及模型导出、服务化接口和批量推理任务设计。

6.1 TensorFlow 模型导出

TensorFlow 的 SavedModel 格式是官方推荐的部署格式,TensorFlow Serving 可以直接加载。

# 导出 SavedModel 格式 python -c " import tensorflow as tf model = tf.keras.models.load_model('mnist_tf.h5') tf.saved_model.save(model, 'saved_model/mnist') "

启动 TensorFlow Serving:

docker pull tensorflow/serving docker run -p 8501:8501 \ --mount type=bind,source=$(pwd)/saved_model/mnist,target=/models/mnist \ -e MODEL_NAME=mnist -t tensorflow/serving

启动完成后,可以通过 RESTful API 调用:

curl -X POST http://localhost:8501/v1/models/mnist:predict \ -H "Content-Type: application/json" \ -d '{"instances": [[[[0.0], [0.0], ...]]]}'

TensorFlow Serving 的接口能力比较完整,支持模型热加载、多版本管理、批量请求。如果生产环境本身对高并发和稳定性要求高,这是很实用的能力。

6.2 PyTorch 模型导出

PyTorch 的部署方案有三种常见方式:TorchScript、ONNX 和 TorchServe。

导出 ONNX 格式:

import torch model = CNN() model.load_state_dict(torch.load("mnist_torch.pth")) model.eval() dummy_input = torch.randn(1, 1, 28, 28) torch.onnx.export(model, dummy_input, "mnist.onnx", input_names=["input"], output_names=["output"], dynamic_axes={"input": {0: "batch_size"}, "output": {0: "batch_size"}})

ONNX 模型可以转成 ONNX Runtime、TensorRT、OpenVINO 等推理格式,在 CPU 和 GPU 上都能高效运行,是 PyTorch 模型对接生产环境的主流方案。

如果希望使用完整的服务化方案,TorchServe 是官方提供的选择:

torchserve --start --model-store model_store --models mnist=mnist.mar

调用方式:

curl -X POST http://127.0.0.1:8080/predictions/mnist \ -T input_image.png

6.3 批量任务设计思路

批量任务的核心是“输入目录 + 输出目录 + 失败重试”三件套。

Python 批量推理的通用框架如下:

import os import glob from tqdm import tqdm input_dir = "./test_images" output_dir = "./test_results" os.makedirs(output_dir, exist_ok=True) image_paths = glob.glob(os.path.join(input_dir, "*.png")) for image_path in tqdm(image_paths): try: # 单张推理 result = predict(image_path) # 保存结果 save_result(image_path, result) except Exception as e: print(f"Failed: {image_path}, error: {e}") # 记录失败文件,后续重试 log_failure(image_path, str(e))

设计批量任务时注意三点:每个样本之间不要共享可变状态;失败任务单独记录而不是直接跳过;添加进度日志和总耗时统计。

在 API 服务中使用批量处理时,可以把多个请求合并成一个 batch,GPU 利用率会明显提升。PyTorch 的 DataLoader 天然支持这个能力,TensorFlow 的model.predict也会自动处理 batch 维度。

7. 资源占用与性能观察

性能对比不能只看跑分,还要看在实际设备上的资源占用表现。不同硬件环境下两个框架的差异可能完全不同。

7.1 显存占用观察方法

训练过程中观察显存占用,可以使用nvidia-smi

watch -n 1 nvidia-smi

关注以下指标:

  • Memory-Usage:显存占用,深度学习训练阶段大幅增长是正常现象
  • GPU-Util:GPU 利用率,训练时一般应达到 70% 以上
  • Processes:当前占用 GPU 的进程

如果显存占用接近显卡上限,优先降低 batch size,这是最简单有效的办法。也可以把输入图片分辨率调低,或者使用混合精度训练。实际训练显存占用需要根据模型结构、batch size、输入分辨率和优化器类型综合计算,不同模型之间差异很大,不能仅凭框架来判断。

7.2 CPU 推理和 GPU 推理的差异

CPU 推理的瓶颈通常在算子执行效率和内存带宽,GPU 推理的瓶颈通常在数据加载和 GPU 显存容量。

在 CPU 环境下,TensorFlow 默认会启用多线程,tf.config.threading可以控制线程数。PyTorch 在 CPU 推理时会自动使用所有可用核心,也可以手动设置:

torch.set_num_threads(4)

如果 CPU 推理速度不理想,建议先用 ONNX Runtime 或 OpenVINO 做一次模型转换,往往能带来 2 到 5 倍的加速。

7.3 降低显存占用的通用方法

无论使用哪个框架,按下面的优先级调整显存占用:

第一,减小 batch size。从 32 降到 16 或 8,显存占用成比例下降。

第二,降低输入分辨率。目标检测任务中,把输入图片从 640x640 降到 512x512,显存和速度都会有明显改善。

第三,使用混合精度训练。NVIDIA GPU 上可以使用 TensorFlow 的mixed_float16策略或 PyTorch 的torch.cuda.amp,显存占用能降低 30% 到 50%。

第四,使用梯度累积。batch size 太小导致 BN 不稳定时,可以累积多个 step 的梯度再更新一次,模拟更大的 batch size。

7.4 端口冲突与进程残留处理

启动服务时最常遇到的就是端口被占用。linux 下可以用下面的方式排查:

lsof -i:8501

如果端口被占,直接换端口启动即可。分布式训练或服务中断后,偶尔会有残留进程占住 GPU 显存,使用下面的命令查看并结束:

fuser -v /dev/nvidia* kill -9 <pid>

不建议直接 kill 所有 Python 进程,避免误伤其他正在运行的任务。

8. 常见问题与排查方法

下面整理一份高频问题排查清单,覆盖这个主题下最常见的坑。

问题现象可能原因排查方式解决方案
安装 TensorFlow 后 import 报错Python 版本不兼容查看报错中的版本要求使用 Python 3.10 或 3.11 重新创建环境
PyTorch 提示 CUDA 不可用驱动版本过旧或 CUDA 工具包不匹配执行nvidia-smi查看驱动版本升级显卡驱动或按对应 CUDA 版本重装 PyTorch
训练速度极慢数据集加载没有并行观察 CPU 和 GPU 利用率使用 DataLoader 的num_workers参数或tf.data的并行读取
显存不足(OOM)batch size 太大查看报错信息中显存分配大小减小 batch size 或使用混合精度
加载模型时报错结构不匹配模型结构与权重文件不匹配比对模型定义和训练时结构确保加载前先定义相同结构的模型
服务启动后端口被占用端口冲突使用lsofnetstat检查更换端口或结束占用进程
模型推理结果全相同模型没有切换到 eval 模式检查代码是否调用model.eval()PyTorch 需要显式切换模式
API 批量请求超时请求队列堆积查看服务日志和请求耗时增大 batch size、升级 GPU 或做异步处理
秋叶启动器 PyTorch 安装失败依赖不匹配查看安装日志清空缓存后使用 pip 重装,避免混用 conda 和 pip

8.1 版本相关的注意事项

PyTorch 2.6 版本开始,torch.load默认将weights_only参数设为True,这会影响加载包含自定义类对象的模型文件。如果加载旧模型时报错,需要显式设置:

torch.load("model.pth", weights_only=False)

TensorFlow 版本更新时也时常出现接口变动和部分算子弃用。建议查看官方 Release Notes,确认当前项目依赖的 API 是否受影响。

9. 最佳实践与使用建议

无论选择哪个框架,下面这些工程化建议都能帮你减少踩坑次数。

9.1 环境隔离

强烈建议为每个项目创建独立的 conda 虚拟环境,并记录完整的版本信息。部署到新机器时,用requirements.txtenvironment.yml还原环境,能避免大量“在本机跑得好好的,换台机器就出问题”的尴尬。

name: torch_env channels: - pytorch - nvidia - conda-forge dependencies: - python=3.10 - pytorch - torchvision - torchaudio - pytorch-cuda=12.1

9.2 目录结构规范

建议建立统一的项目目录:

project/ ├── data/ # 原始数据和预处理脚本 ├── models/ # 模型结构定义 ├── weights/ # 训练好的权重文件 ├── logs/ # 训练日志 ├── outputs/ # 推理结果 └── scripts/ # 训练、评估、推理脚本

这种结构能让模型文件、训练数据、推理结果各归其位,批量任务和后续回溯都方便。

9.3 调试顺序

第一次跑一个新模型,不要一上来就全量训练。先用 100 条数据、1 个 epoch 验证流程能否跑通,再逐步扩大数据量。这样可以快速发现数据读取、维度匹配、标签对齐等问题,不用浪费时间等一个注定失败的训练任务。

9.4 模型版本管理

模型文件和代码一样需要版本管理。推荐在模型文件名中加入训练日期、数据集版本、指标值,例如mnist_20250101_acc99.2.pth。条件允许的话,用 DVC(Data Version Control)管理数据集和模型文件,追踪每次实验对应的完整环境。

9.5 合规与安全

使用公开数据集时,确认数据集的许可证是否允许商用。训练人脸、语音、生物特征相关模型时,必须确保数据来源合法、获得授权,并且不采集未授权个人信息。部署推理服务时,不要在公网无限制暴露接口,至少要加 API Key 或 IP 白名单。涉及生成式模型时,输出的内容需要审核并明确标注 AI 生成,防止滥用。

10. 总结与下一步

TensorFlow 和 PyTorch 现在的边界已经越来越清晰:TensorFlow 更适合完整生产链路、移动端部署和已有 Java/Go 技术栈的团队;PyTorch 更适合学术研究、算法原型和生成式模型开发。对新手来说,如果目标是快速理解深度学习并在实际项目中动手,先学 PyTorch 会更顺;如果目标是在公司做模型部署上线,TensorFlow 的生产工具链更完整。

建议拿到这篇文章后先做三件事:按照第 4 节的命令安装其中任意一个框架,跑通第 5 节的手写数字识别代码,再用第 7 节的方法观察一次显存占用。把流程跑通之后,再回来对比另一个框架的安装和训练体验,这时候你会有更具体的判断。

最容易踩的坑在环境配置阶段,特别是 CUDA 和 Python 版本不匹配的问题。建议建好虚拟环境后先运行框架自带的验证命令,确认 GPU 可用,再进行后续开发。

后续可以尝试的方向:把训练好的 PyTorch 模型转成 ONNX,用 ONNX Runtime 部署到 CPU 服务器;或者把 TensorFlow 模型转成 TFLite 部署到 Android 端。掌握了模型导出和服务化调用之后,两个框架的真正区别你就能在生产环境中体会到。建议收藏备用,遇到环境问题可以直接翻到第 8 节排查。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询