深度学习框架实战对比教程(面向零基础初学者)
云端造物者
2025-06-15 16:51
阅读 550
开篇:深度学习框架是什么,又为什么要用它?

你可能听说过“人工智能”这个词,比如自动驾驶、语音助手、图像识别这些酷炫的技术。它们背后都有一个叫 深度学习 的技术支撑。
而深度学习框架,就像做蛋糕的烤箱和模具一样——它是帮你快速搭建、训练深度学习模型的工具。
目前最常用的两个框架是:
- PyTorch:由 Facebook 开发,适合研究和开发
- TensorFlow/Keras:由 Google 开发,适合工业部署
本教程将通过一个简单的项目,带你动手实操这两个框架,看看它们有什么不同。
环境准备:从零开始配置你的编程环境

第一步:安装 Python
如果你还没安装 Python,建议使用 Anaconda,它可以方便地管理多个 Python 环境。
在命令行中输入:
python --version
如果显示版本号(比如 3.8 或以上),说明已经安装好了。
第二步:安装 PyTorch 和 TensorFlow
我们创建两个独立的虚拟环境,分别用于运行 PyTorch 和 TensorFlow 的代码。
安装 PyTorch 环境
conda create -n pytorch_env python=3.9
conda activate pytorch_env
pip install torch
安装 TensorFlow/Keras 环境
conda create -n tf_env python=3.9
conda activate tf_env
pip install tensorflow
第三步:安装 Jupyter Notebook(推荐)
Jupyter 是一种交互式的编程笔记工具,非常适合学习和写代码片段。
pip install jupyterlab
jupyter notebook
这会自动打开浏览器,你可以新建 .ipynb 文件来运行代码。
核心概念:不用死记硬背,跟着例子学懂关键术语

什么是“张量”(Tensor)?
想象成表格或者数组。例如:
- 数字就是0维张量:如
5 - 一行数就是1维张量:如
[1, 2, 3] - 表格就是2维张量:如
[[1, 2], [3, 4]]
深度学习中的数据最终都要变成张量,才能被模型处理。
什么是“神经网络”?
神经网络就像一个黑盒子,它能根据输入的数据自动学习规律。比如你给它一堆猫狗图片,它最后能自己判断一张图是猫还是狗。
它的核心部件有:
- 输入层(Input Layer)
- 隐藏层(Hidden Layers)
- 输出层(Output Layer)
PyTorch vs TensorFlow:有哪些不同?
| 特点 | PyTorch | TensorFlow |
|---|---|---|
| 编程风格 | 命令式(像写一般程序那样) | 声明式(先定义整个流程再运行) |
| 调试友好性 | 很容易调试(支持 print 查看结果) | 调试略复杂(尤其是旧版) |
| 工业部署能力 | 强(最新版本已支持) | 更成熟 |
| 社区资源 | 学术研究使用多 | 工业界用得多 |
下面我们会用同一个简单任务——手写数字识别(MNIST)来对比两者的代码。
实战项目:用 MNIST 数据集训练模型(动手写第一个项目)

我们要完成的任务很简单:让模型认识手写的0~9数字。
步骤一:加载数据(以 Keras/TensorFlow 为例)
from tensorflow.keras.datasets import mnist
# 加载数据并划分训练集和测试集
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 查看前5个标签(应该是 0~9 的数字)
print(y_train[:5])
输出示例:
[5 0 4 1 9]
小提示:为什么需要“归一化”?
图像像素值范围是 0255,我们要把它压缩到 01 之间,这样模型更容易处理。
x_train = x_train / 255.0
x_test = x_test / 255.0
步骤二:建立模型(Keras)
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Flatten, Dense
# 创建一个顺序模型(一层接一层)
model = Sequential([
Flatten(input_shape=(28, 28)), # 把 28x28 的图像压平成一列
Dense(128, activation='relu'), # 中间层,带激活函数
Dense(10, activation='softmax') # 输出层,给出 10 个数字的概率
])
# 打印模型结构
model.summary()
你会看到类似这样的信息:
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
flatten (Flatten) (None, 784) 0
dense (Dense) (None, 128) 100480
dense_1 (Dense) (None, 10) 1290
=================================================================
Total params: 101770 (397.54 KB)
Trainable params: 101770 (397.54 KB)
Non-trainable params: 0 (0.00 Byte)
_________________________________________________________________
步骤三:编译和训练模型
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 开始训练(epochs=迭代次数)
model.fit(x_train, y_train, epochs=5)
你会看到训练过程的进度条和精度变化。
步骤四:评估模型效果(TensorFlow)
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)
print('\nTest accuracy:', test_acc)
PyTorch 实现相同功能(对比练习)
加载数据
import torch
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
transform = transforms.ToTensor()
train_dataset = datasets.MNIST(root='./data', train=True, transform=transform, download=True)
test_dataset = datasets.MNIST(root='./data', train=False, transform=transform)
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=64)
构建模型
import torch.nn as nn
class SimpleNet(nn.Module):
def __init__(self):
super().__init__()
self.flatten = nn.Flatten()
self.linear_relu_stack = nn.Sequential(
nn.Linear(28*28, 128),
nn.ReLU(),
nn.Linear(128, 10)
)
def forward(self, x):
x = self.flatten(x)
logits = self.linear_relu_stack(x)
return logits
model = SimpleNet()
print(model)
训练模型
loss_fn = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
def train(dataloader, model, loss_fn, optimizer):
for X, y in dataloader:
pred = model(X)
loss = loss_fn(pred, y)
# 反向传播
optimizer.zero_grad()
loss.backward()
optimizer.step()
for epoch in range(5):
print(f"Epoch {epoch+1}\n-------------------------------")
train(train_loader, model, loss_fn, optimizer)
print("Done!")
测试准确率
def test(dataloader, model):
correct = 0
total = 0
with torch.no_grad():
for images, labels in dataloader:
outputs = model(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
print(f'Accuracy: {100 * correct / total}%')
test(test_loader, model)
常见问题解答(FAQ)
❓Q1:为什么我的模型总是不收敛?
- 可能原因:
- 学习率设置太高或太低
- 模型层数太多或太少
- 数据没有预处理好(比如没归一化)
🔍 解决方法:尝试调整 lr 参数,比如设为 0.001,或换小一点的模型。
❓Q2:PyTorch 和 TensorFlow 我该学哪个?
- 如果你想做科研、写论文 → 推荐 PyTorch
- 如果你想进公司、做产品 → 推荐 TensorFlow + Keras
✅ 两个都学更好!了解它们的特点,以后切换起来很容易。
❓Q3:为什么训练时有时显存不足?
- 原因:
- 图片太大或者 batch size 设置得太大
- GPU 内存不够
🔧 解决方案:
- 减小 batch size(例如从 128 改成 32)
- 使用更小的模型
- 换更高性能的 GPU(云平台如 Colab 提供免费 GPU)
下一步学习建议:继续深入的路线图
✅ 入门级项目推荐
- 图像分类:CIFAR-10
- 文本分类:IMDB 电影评论分析
- 简单生成模型:GAN 生成手写数字
🔁 进阶主题学习
- CNN(卷积神经网络)原理与实现
- RNN/LSTM 处理时间序列/文本
- 自动调参(AutoML)、模型优化技巧
🧪 实验与部署
- 用 TensorBoard 监控训练过程
- 模型保存与加载
- 将模型部署到 Web 应用(如 Flask)
📘 推荐学习资源
- 《深度学习之 PyTorch 实战》(豆瓣高分)
- TensorFlow 官方文档(英文为主)
- Coursera 上 Andrew Ng 的 Deep Learning 课程
🎉 总结一下今天学会了什么:
- 深度学习框架的基本作用
- 如何配置 Python 环境
- 理解了张量、神经网络等基本概念
- 动手实现了图像分类项目
- 初步掌握了 PyTorch 与 TensorFlow 的区别
接下来建议你:
- 在自己的电脑上复现这个项目
- 尝试修改超参数(如 learning rate、隐藏层节点数)
- 搜索 “hello world of deep learning” 看更多案例
深度学习世界很大,但只要你愿意敲代码,就能一步步走进去!💪
标签:GitHub实战经验
为你推荐
暂无相关推荐

评论 0