深度学习框架实战对比:从零开始的完整教程
开篇:为什么需要深度学习框架?

想象你是一位刚刚入门人工智能领域的新手,面对“深度学习”这个听起来很高端的技术,你可能满脑子问号:“这是什么?”、“有什么用?”、“我能不能也搞点AI出来?”别担心,我们今天就来帮你迈出第一步。
深度学习到底是什么?
简单来说,深度学习是一种让电脑像人一样“学会思考”的技术。比如现在手机里的语音助手能听懂你说的话、拍照时能自动识别人脸并对焦、甚至一些软件能自动生成文章或画图——这些都是深度学习在背后默默工作的结果。而实现这些功能的关键工具之一,就是深度学习框架(Deep Learning Framework)。
那什么是深度学习框架?
你可以把它想象成一款“AI开发工具箱”。它把复杂的数学运算和算法都封装好了,开发者只需要使用它的接口写代码就能训练出智能模型,不需要自己去推导那些复杂的公式。当前最主流的两个工具是 PyTorch 和 TensorFlow/Keras,它们各有特色。
这篇文章要带你做什么?
我们的目标很简单:
- 通过对比 PyTorch 和 TensorFlow 的基本操作,让你了解它们之间的差异
- 不用复杂术语,只讲你能看懂的内容
- 手把手教你写出自己的第一个 AI 小程序,体验训练模型的过程
准备好变身“AI开发者”了吗?让我们一起上路!
环境准备:一键搭建你的AI实验室

第一步:安装Python
几乎所有深度学习框架都需要 Python 编程语言的支持。如果你还没有安装 Python,建议前往 官网 下载最新版本(推荐 Python 3.9 或以上)。安装时记得勾选 Add to PATH,这样可以在任何地方运行 Python 命令。
安装完成后,在命令行中输入:
python --version
如果出现类似 Python 3.9.12 的字样,说明安装成功了!
第二步:创建虚拟环境(推荐但非强制)
为了避免不同项目之间的依赖冲突,我们建议使用 venv 创建一个独立的虚拟环境。运行以下命令即可新建一个名为 dl_env 的环境:
python -m venv dl_env
激活虚拟环境(Windows 上运行):
dl_env\Scripts\activate
Mac/Linux 用户则运行:
source dl_env/bin/activate
第三步:安装 PyTorch 和 TensorFlow
我们现在将安装两个主流的深度学习框架。
安装 PyTorch
在终端中执行以下命令:
pip install torch
验证是否安装成功:
import torch
print(torch.__version__)
你应该会看到类似输出,表示 PyTorch 已安装完毕。
安装 TensorFlow 和 Keras
接着,我们安装 TensorFlow 和其高层 API Keras:
pip install tensorflow
验证 TensorFlow 安装是否正确:
import tensorflow as tf
print(tf.__version__)
如果你想确认 Keras 是否可用,可以运行以下代码:
from tensorflow import keras
print(keras.__version__)
一旦出现版本号,说明安装完成了!
第四步:选择编辑器(IDE)
编写 Python 程序推荐使用 Jupyter Notebook(适合初学者) 或 VS Code(功能强大)。
使用 Jupyter Notebook
安装 Jupyter:
pip install notebook
启动 Jupyter Notebook:
jupyter notebook
浏览器会打开一个新的页面,点击 New > Python 3 新建一个空白笔记本,就可以开始写代码啦!
使用 VS Code(进阶推荐)
下载安装 VS Code,然后安装 Python 插件。打开终端,切换到你的虚拟环境后,就可以直接用 VS Code 编辑 .py 文件。
总结安装步骤
| 步骤 | 内容 | 备注 |
|---|---|---|
| 1 | 安装 Python | 推荐 3.9 以上 |
| 2 | 创建虚拟环境 | 可选但推荐 |
| 3 | 安装 PyTorch 和 TensorFlow | pip 安装即可 |
| 4 | 安装 IDE(Jupyter 或 VS Code) | 初学者优先推荐 Jupyter |
现在你的电脑已经变成了一个小型 AI 实验室,接下来我们将进入最重要的部分:理解深度学习的基本概念!
核心概念:神经网络究竟是什么?

虽然听起来很高大上,其实神经网络的本质非常简单。我们可以把它想象成一个“数字大脑”,它能学习数据中的模式,并做出预测。
什么是神经网络?
想象你在教一个孩子识别猫和狗的照片。你会给他说:“这张是猫,这张是狗”,让他不断观察、记忆,最终他就能自己判断一张新的图片是猫还是狗。
神经网络的工作原理和这差不多。我们给它大量的数据,让它自己找出其中的规律,最后它就能做出预测。
神经网络的结构(简单版)
- 输入层(Input Layer):接收原始数据,例如图像像素值、文字向量等
- 隐藏层(Hidden Layers):负责提取数据中的特征,越深的层学到的特征越抽象
- 输出层(Output Layer):给出最终的预测结果,比如分类为“猫”或“狗”
举个例子:假如我们要训练一个模型识别手写数字(0~9),那么输入层可能是一个 28x28 像素的图像,中间隐藏层会逐步学到“线条形状”、“弯曲角度”等特征,最后输出层决定这是哪个数字。
什么是损失函数(Loss Function)?
机器学习的一个核心思想是“错误越大,学得越快”。损失函数就像是考试后的评分标准,它告诉模型:你这次预测的结果离正确答案有多远?
常见损失函数如下:
- 均方误差(MSE):用于回归问题(如预测房价)
- 交叉熵损失(Cross Entropy Loss):用于分类问题(如识别图像类别)
举个例子:假设我们希望模型预测“1+1=2”,但它却说“1+1=3”,这时损失函数就会计算这个错误有多大,并反馈给模型去调整参数。
优化器(Optimizer)的作用
优化器就像训练师,它帮助神经网络调整权重,使得下一次预测更接近真实答案。
常见优化器有:
- SGD(随机梯度下降):最基础的优化器
- Adam:收敛速度快,适合大多数场景
你可以把优化器想象成一位导师,它会根据模型犯错的程度,告诉它该怎么调整才能做得更好。
学习率(Learning Rate)是什么?
学习率决定了模型每次调整参数的幅度。如果学习率太大,模型可能会跳过最优解;如果太小,训练过程就会非常慢。
通常我们会从 0.001 这样的数值开始尝试,后续再根据训练效果进行调整。
梯度下降(Gradient Descent)是什么?
梯度下降是模型更新参数的核心方法。简单理解就是:“朝着错误最小的方向一步步前进。”
你可以把它想象成一个人在迷雾山中寻找最低点。每次踩一脚看看坡度如何,然后决定下一步往哪走。这就是梯度下降的基本思路。
数据集、批量大小和迭代次数
为了让模型真正“学会”数据中的规律,我们需要提供大量样本供它学习。这里有几个关键概念:
- 数据集(Dataset):训练用的数据,如 MNIST 手写数字集
- 批量大小(Batch Size):每次训练使用的样本数量,通常设置为 32、64、128 等
- 迭代次数(Epoch):整个数据集被训练一遍称为一轮,一般训练 10~50 轮不等
例如,如果我们有一个包含 60000 张图片的 MNIST 数据集,设置 batch_size=32,那么每轮训练会分 60000 / 32 = 1875 次完成一次完整的训练。
PyTorch 和 TensorFlow 的区别(初步认知)
| 功能 | PyTorch | TensorFlow |
|---|---|---|
| 构建方式 | 动态计算图(灵活) | 静态计算图(高效) |
| 语法风格 | 更接近 NumPy | 更加模块化 |
| 社区支持 | 学术研究更常用 | 工业应用更广泛 |
| 可读性 | 适合调试 | 适合部署 |
简单来说:
- PyTorch 更适合做实验、调模型、写论文
- TensorFlow 更适合上线、部署、大规模训练
我们会在后面的实战环节详细展示两者的具体使用方式。
实战项目:用 PyTorch 和 TensorFlow 实现一个简单的图像识别模型
现在我们来动手实践一下!我们将用 MNIST 手写数字数据集 来训练一个简单的图像识别模型。这个数据集包含了 70,000 张 28×28 的灰度手写数字图像,非常适合新手入门。
我们将分别用 PyTorch 和 TensorFlow 来完成训练任务,通过对比你会发现两者之间的主要区别。
准备工作
首先确保你已经按照前面的章节安装好 PyTorch 和 TensorFlow。我们还需要导入一些必要的库:
对于 PyTorch:
import torch
from torchvision import datasets, transforms
对于 TensorFlow + Keras:
import tensorflow as tf
from tensorflow.keras.datasets import mnist
步骤一:加载 MNIST 数据集
PyTorch 版本
# 数据预处理
transform = transforms.Compose([
transforms.ToTensor(), # 将图像转换为 Tensor
transforms.Normalize((0.5,), (0.5,)) # 归一化
])
# 加载训练集和测试集
trainset = datasets.MNIST('~/.pytorch/MNIST_data/', download=True, train=True, transform=transform)
testset = datasets.MNIST('~/.pytorch/MNIST_data/', download=True, train=False, transform=transform)
# 创建 DataLoader
trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)
testloader = torch.utils.data.DataLoader(testset, batch_size=64, shuffle=True)
TensorFlow/Keras 版本
# 加载数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 数据归一化
x_train = x_train / 255.0
x_test = x_test / 255.0
# 查看一下前几个样本
print("训练集前三个标签:", y_train[:3])
步骤二:构建一个简单的全连接网络(FCN)
我们将构建一个三层的全连接网络:
- 输入层(28×28 = 784 个像素)
- 隐藏层(128 个神经元)
- 输出层(10 类,对应 0~9 的数字)
PyTorch 版本
import torch.nn as nn
import torch.nn.functional as F
class SimpleNet(nn.Module):
def __init__(self):
super(SimpleNet, self).__init__()
self.fc1 = nn.Linear(784, 128) # 第一层
self.fc2 = nn.Linear(128, 10) # 第二层
def forward(self, x):
x = x.view(-1, 784) # 展平输入
x = F.relu(self.fc1(x)) # 激活函数
x = self.fc2(x)
return x
net = SimpleNet()
TensorFlow/Keras 版本
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Flatten, Dense
model = Sequential([
Flatten(input_shape=(28, 28)), # 展平
Dense(128, activation='relu'), # 全连接 + ReLU 激活
Dense(10) # 输出层
])
model.summary()
步骤三:定义损失函数与优化器
PyTorch 版本
criterion = nn.CrossEntropyLoss() # 交叉熵损失函数
optimizer = torch.optim.Adam(net.parameters(), lr=0.001) # 优化器
TensorFlow/Keras 版本
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
步骤四:训练模型
PyTorch 版本
epochs = 5
for e in range(epochs):
running_loss = 0
for images, labels in trainloader:
optimizer.zero_grad()
output = net(images)
loss = criterion(output, labels)
loss.backward()
optimizer.step()
running_loss += loss.item()
print(f"Epoch {e+1} - Training loss: {running_loss/len(trainloader)}")
TensorFlow/Keras 版本
history = model.fit(x_train, y_train, epochs=5, validation_split=0.1)
Keras 的 fit() 方法自动处理了训练流程,非常简洁方便。
步骤五:评估模型性能
PyTorch 版本
correct_count, all_count = 0, 0
for images, labels in testloader:
with torch.no_grad():
log_ps = net(images)
ps = torch.exp(log_ps)
_, top_class = ps.topk(1, dim=1)
equals = top_class == labels.view(*top_class.shape)
correct_count += torch.sum(equals).item()
all_count += len(equals)
print(f"Test accuracy: {correct_count / all_count}")
TensorFlow/Keras 版本
loss, acc = model.evaluate(x_test, y_test, verbose=2)
print(f"Test accuracy: {acc:.2f}")
总结两种框架的区别
| 操作 | PyTorch | TensorFlow/Keras |
|---|---|---|
| 构建模型 | 自定义类(面向对象) | Sequential 模式(模块化) |
| 损失函数 | 使用 nn.CrossEntropyLoss() |
使用内置 SparseCategoricalCrossentropy |
| 优化器 | 使用 torch.optim.Adam() |
使用内置 'adam' 参数 |
| 训练循环 | 手动控制前向传播和反向传播 | 使用 .fit() 快速训练 |
| 测试过程 | 需要手动计算准确率 | 使用 .evaluate() 自动完成 |
PyTorch 的优势:灵活性强,更适合研究和调试模型。
TensorFlow 的优势:自动化程度高,更适合生产环境和快速部署。

你现在已经亲手训练了一个图像识别模型!下一节我们来看看新手在实践中常遇到的问题及解决方法。
常见问题解答:从安装报错到模型不训练,我们都替你想到了
刚开始学习深度学习,总会遇到各种各样的坑。不要担心,下面列出了一些最常见的问题及其解决办法,助你顺利通关!
1. “ImportError: No module named ‘torch’” —— 安装失败怎么办?
这个问题通常是由于没有正确安装相关包导致的。请回到环境准备章节,重新按照步骤安装 PyTorch 或 TensorFlow。
解决方案:
使用 pip 重新安装:
pip install torch如果在国内访问 pip 太慢,可以换国内源加速安装:
pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple如果使用了虚拟环境,请确认当前终端是否已经激活该环境。
2. “ModuleNotFoundError: No module named ‘keras’” —— Keras 报错
注意,Keras 是 TensorFlow 的一部分。因此你需要先安装 TensorFlow:
pip install tensorflow
然后在代码中这样导入:
from tensorflow import keras
3. “RuntimeError: CUDA out of memory” —— 显存不足怎么办?
如果你使用 GPU 运行程序,并收到显存不足的提示,可能是你的批次太大或者模型太复杂。
解决办法:
- 降低
batch_size,例如从 128 改为 64 - 如果没有 GPU,改用 CPU:
device = 'cpu'
4. “Model doesn't train” —— 模型怎么一点变化都没有?
有时候训练过程中发现损失值一直不变,这说明模型没学到任何东西。常见的原因包括:
✅ 检查项清单:
- ✅ 学习率设置是否合理:太大可能导致震荡,太小会导致缓慢收敛,通常从
0.001开始试 - ✅ 损失函数是否匹配任务:分类任务应使用交叉熵损失,而不是均方误差
- ✅ 数据是否打乱顺序:
shuffle=True可以提高训练效率 - ✅ 是否缺少激活函数:如
ReLU或sigmoid - ✅ 数据是否已正确归一化:例如将像素值除以 255,使其范围变为 0~1

5. “AttributeError: module has no attribute xxx” —— 出现奇怪的属性错误
这种问题通常是因为版本不兼容或拼

评论 0