一、主流深度学习框架对比

1. TensorFlow

1)概念

TensorFlow 是由 Google 开发并开源的深度学习框架,拥有庞大而完善的生态系统和强大的工业级部署能力。它支持多种硬件平台,包括 CPU、GPU 以及 Google 自研的 TPU,并同时提供了高级 API(如 Keras)和灵活的底层 API,兼顾易用性与定制性。

2)优缺点

优点 缺点
生态系统完善,工具链丰富 代码相对冗长,上手门槛较高
支持跨平台部署(移动端、Web、服务端) 早期版本 API 变动频繁
具备工业级稳定性和性能优化 动态图支持晚于 PyTorch

2. PyTorch

1)概念

PyTorch 是由 Facebook(现 Meta) 推出的深度学习框架,因其动态计算图特性而备受研究人员青睐。它允许用户在运行时动态定义和修改模型,使得调试和实验更加灵活直观。目前 PyTorch 在学术界和研究领域占据主导地位。

2)优缺点

优点 缺点
上手容易,代码风格贴近 Python 生态系统相对 TensorFlow 较小
动态图机制便于调试和可视化 工业级部署工具链不如 TensorFlow 成熟
与 NumPy 无缝衔接,学习曲线平缓 部分高级功能的文档和教程资源较少

3. Keras

1)概念

Keras 是一个高级神经网络 API,最初独立开发,现已集成到 TensorFlow 中作为 tf.keras。它可以在 TensorFlow、Theano 等后端上运行,提供极简的 API 设计,使得模型搭建如同"搭积木"般便捷,非常适合初学者和快速原型验证。

2)优缺点

优点 缺点
API 设计简洁,代码量少 功能相对有限,灵活性不足
多后端支持(可切换底层引擎) 大规模复杂任务性能不如原生框架
适合快速入门和原型开发 底层细节被封装,不利于深入理解

4. Caffe

1)概念

Caffe 是由 贾扬清 等人开发的深度学习框架,专注于卷积神经网络(CNN) 的应用场景。它采用配置文件的方式定义网络结构,无需编写代码即可搭建模型,在计算机视觉领域曾风靡一时。

2)优缺点

优点 缺点
通过配置文件即可搭建网络 安装过程复杂,依赖较多
高效的 C++ 实现,推理速度快 近些年几乎停止更新,新模型缺失
适合快速部署经典 CNN 模型 灵活性较差,难以支持复杂网络结构

二、PyTorch 安装与环境配置

1. 安装指南

详细的 PyTorch 安装教程可参考以下博客:

PyTorch 安装教程(CPU/GPU 版本)

2. CPU 版本 vs GPU 版本

1)CPU 版本

CPU(中央处理器) 是计算机的运算和控制核心,负责信息处理与程序执行。其内部结构可概括为:

  • ALU(运算单元):约 25%
  • Control(控制单元):约 25%
  • Cache(缓存单元):约 50%

CPU 擅长逻辑控制和串行任务处理,但在大规模并行计算方面能力有限。

在这里插入图片描述

2)GPU 版本

GPU(图形处理器) 最初设计用于图形渲染,因其强大的并行计算能力而被引入深度学习领域。其内部结构特点为:

  • ALU(运算单元):约 90%
  • Control(控制单元):约 5%
  • Cache(缓存单元):约 5%

GPU 拥有数千个计算核心,适合矩阵乘法、卷积等大规模并行运算。PyTorch 通过 CUDA 驱动调用 GPU 进行加速训练,可大幅缩短模型训练时间。

对比示例:将大规模图像数据传入 CPU 时,内存占用几乎满载;而传入 GPU 时则绰绰有余,显存空间更为充裕。

3. 显卡核心参数

参数 含义 常见规格
显存容量 决定临时存储数据的能力 6GB、8GB、24GB、48GB 等
显存频率 反映显存的数据传输速度 1600MHz、3800MHz、5000MHz 等
显存位宽 每个时钟周期可传输的数据位数 64、128、192、256、384、512 bit

如何查看本机显卡型号:右键任务栏 → 打开任务管理器 → 点击"性能"选项卡 → 查看 GPU 信息。
在这里插入图片描述


三、PyTorch 框架初步认识

1. 基于 MNIST 数据集的手写数字识别

完整的代码实现流程参见上节课内容:

2. 整体流程概述

以手写数字识别任务为例,整体流程如下:

  1. 使用 datasets.MNIST 下载训练集和测试集,包含大量手写数字图片及其真实标签;
  2. 将图片数据按批次打包(如每批 64 张);
  3. 在 GPU 中构建神经网络模型;
  4. 将打包好的训练数据传入 GPU 进行模型训练;
  5. 使用测试集数据验证模型效果,并与真实值对比,计算准确率。

在这里插入图片描述

3. 模型结构示例

以**多层感知器(MLP,Multilayer Perceptron)**为例,网络结构通常包括:

  • 输入层(784 个神经元,对应 28×28 像素)
  • 隐藏层(若干层,每层若干神经元)
  • 输出层(10 个神经元,对应 0~9 共 10 个类别)

在这里插入图片描述

4. 常见优化器

1)BGD(批量梯度下降,Batch Gradient Descent)

  • 使用全量样本计算梯度,如 batch_size=64 时一次计算 64 个梯度。
  • 优点:收敛稳定,迭代次数少。
  • 缺点:每次迭代需处理全部数据,内存消耗大,训练速度慢。

2)SGD(随机梯度下降,Stochastic Gradient Descent)

  • 每次迭代随机抽取 1 个样本进行梯度计算和参数更新。
  • 优点:计算速度快,可在线学习。
  • 缺点:梯度波动大,收敛路径不稳定。

3)Mini-batch Gradient Descent(小批量梯度下降)

  • 综合 BGD 和 SGD 的优势,每批选取 batch_size 个样本(如 32、64、128)计算梯度并更新参数。
  • 优点:兼顾稳定性和速度,实际应用中最常用。

4)Adam(自适应矩估计,Adaptive Moment Estimation)

  • 结合了**动量(Momentum)**和 RMSprop 的思想,为每个参数自适应调整学习率。
  • 优点:收敛速度快,参数调优简单,适用范围广。

5)Adagrad(自适应梯度算法)

  • 为每个参数维护独立的学习率,根据历史梯度自动调整。
  • 优点:适合稀疏数据场景。
  • 缺点:学习率单调递减,后期可能过小导致训练停滞。

6)RMSprop(均方根传播)

  • 改进 Adagrad,引入衰减系数平衡历史梯度的重要性。
  • 优点:适合非平稳目标和 RNN 训练。

四、激活函数详解

1. 常见激活函数

1)Sigmoid

Sigmoid 函数将输入映射到 (0, 1) 区间,输出可解释为概率值,常用于二分类任务的输出层。

  • 优点:输出范围平滑,便于梯度更新。
  • 缺点:饱和区域梯度趋近于零,容易引发梯度消失

2)Tanh(双曲正切)

Tanh 函数将输入映射到 (-1, 1) 区间,输出以零为中心,有利于数据分布。

  • 优点:输出均值接近 0,比 Sigmoid 更利于梯度更新。
  • 缺点:同样存在梯度消失问题。

3)ReLU(修正线性单元)

ReLU 函数在输入大于 0 时保持原值,小于 0 时输出 0。

  • 优点:计算简单,有效缓解梯度消失,加速收敛。
  • 缺点:负数部分完全截断,可能导致神经元死亡问题。

4)LeakyReLU

LeakyReLU 在输入小于 0 时引入一个小的斜率(如 0.01),使负数部分仍有微弱激活。

  • 优点:避免 ReLU 的"神经元死亡"问题。
  • 缺点:需要额外调整斜率超参数。

5)Softmax

Softmax 将输入向量转换为概率分布,输出总和为 1,适用于多分类问题的输出层。

  • 优点:输出可直接解释为各类别概率。
  • 缺点:对异常输入敏感。

在这里插入图片描述

2. 梯度消失

定义:在反向传播过程中,梯度值随着层数增加而指数级衰减,趋近于零,导致浅层网络参数更新极其缓慢,网络难以训练。

常见原因

  • 使用 Sigmoid 或 Tanh 等饱和激活函数,其导数在输入过大或过小时接近 0。
  • 网络层数过深,梯度在多层传播中不断衰减。

解决方案:使用 ReLU 及其变体、引入残差连接(ResNet)、采用批量归一化(BN)等。

3. 梯度爆炸

定义:在反向传播过程中,梯度值指数级增长,导致参数更新幅度过大,模型难以收敛甚至发散。

常见原因

  • 网络权重初始化过大。
  • 深层网络中梯度连续相乘导致数值爆炸。

解决方案:采用合适的权重初始化方法(如 Xavier、He 初始化)、梯度裁剪(Gradient Clipping)、使用更稳定的优化器。
在这里插入图片描述

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐