摘要

本周学习李宏毅《机器学习》第 8-1、8-2、8-3 三讲内容,主题为深度学习实战 Hello World,以经典手写数字 MNIST 数据集为实战案例,从零完成神经网络的搭建、训练、测试全流程。第 8-1 讲介绍 MNIST 数据集任务背景、深度学习实战的整体流程;第 8-2 讲讲解 Keras 2.0 框架的基础用法、Sequential 序列式模型搭建方式、网络层、激活函数、损失函数与优化器的配置;第 8-3 讲结合代码演示完整实战流程,包含数据集加载、数据预处理、模型编译、训练拟合、结果评估、模型预测与错误样本分析。

1 Hello World of Deep Learning

1.1 深度学习入门实战任务:MNIST 手写数字识别

本讲作为深度学习的入门实战案例,选用 MNIST 手写数字数据集,也是深度学习领域经典的 “Hello World” 项目。

数据集一共包含 7 万张 28×28 尺寸的手写灰度数字图片,划分出 6 万张训练样本、1 万张测试样本,每张图片对应 0 到 9 其中一个数字,属于十分类任务。本次任务需要搭建多层神经网络,输入图片像素特征,输出图片对应 0-9 每个数字的预测概率,以此判断手写数字的真实类别。

实战意义:通过该小型任务,熟悉深度学习项目标准流程:数据集加载→数据预处理→搭建神经网络→配置训练参数→模型训练→模型评估→错误案例分析调优。

1.2 传统方法与深度学习方法对比

传统机器学习方案:需要人工提取图片特征(HOG、SIFT 等),再使用 SVM、逻辑回归等模型完成分类,特征设计好坏直接决定模型精度;

深度学习方案:直接将原始像素作为网络输入,依靠多层神经网络自动提取图片底层、高层特征,无需人工设计特征,泛化能力更强,也是深度学习在计算机视觉领域快速发展的核心原因。

1.3 实战整体流程梳理

本次 Keras 实战按照下面步骤开展:
① 加载 MNIST 原始数据集;
② 对图片像素、标签做标准化、独热编码预处理;
③ 使用 Sequential 方式搭建多层全连接神经网络;
④ 选择合适的激活函数、损失函数、梯度优化器,完成模型编译;
⑤ 设置训练轮数、批次大小,开始迭代训练;
⑥ 在测试集上评估模型准确率,查看预测错误的样本;
⑦ 根据错误案例分析模型缺陷,尝试调整网络结构、超参数优化模型效果。

2 Keras 2.0 框架基础

2.1 Keras 框架介绍

Keras 是基于 TensorFlow 后端的高层深度学习 API,封装了大量神经网络底层运算,不用手动实现前向传播、反向传播、梯度求导等复杂数学过程,仅需简单几行代码就能快速搭建、训练神经网络,极大降低了深度学习的工程落地门槛,非常适合新手入门。
Keras 提供两种主流模型搭建方式:Sequential 序列式模型、Functional 函数式模型,入门阶段优先使用 Sequential 序列模型。

2.2 Sequential 序列模型搭建方法

Sequential 可以理解为神经网络的 “容器”,网络层按照添加的顺序从上到下依次堆叠,对应数据前向传播的流向,搭建步骤:

初始化序列模型:model = Sequential()

逐层添加全连接层 Dense,每一层需要指定神经元数量、激活函数:
model.add(Dense(神经元个数, activation="激活函数名称"))

输入层需要通过input_dim指定输入特征维度,MNIST 单张图片 28×28=784 个像素,因此第一层输入维度设置为 784;

隐藏层常用激活函数:relu;输出层多分类任务使用 softmax,将输出归一为十个类别的概率。

2.3 模型编译核心三要素(compile)

网络结构搭建完成后,必须调用model.compile()配置训练相关参数,三个核心参数缺一不可:

损失函数 loss:多分类 + 独热标签选用categorical_crossentropy交叉熵损失,和之前理论学习的交叉熵损失完全对应;

优化器 optimizer:封装了梯度下降相关优化算法,课程使用 adam 自适应优化器,自适应调整学习率,收敛速度快、训练稳定;

评估指标 metrics:选用accuracy准确率,用来统计训练、测试过程中分类正确的样本占比,直观查看模型效果。

2.4 关键超参数说明

batch_size 批次大小:每一次梯度更新所使用的样本数量,把训练集拆分为多个批次依次送入网络训练,平衡训练速度与梯度更新稳定性;

epochs 训练轮数:完整遍历全部训练数据集的次数,轮数过少模型欠拟合,轮数过多容易在训练集上过拟合。

3 Keras 完整代码实战演示

3.1 数据集加载与预处理

直接调用 Keras 内置接口加载 MNIST 数据集,自动划分训练集、测试集;

数据维度重塑:将 28×28 的二维图片像素展平为 784 维一维向量,适配全连接网络输入格式;

像素归一化:原始像素取值范围为 0~255,除以 255 后缩放到 0~1 区间,以此加快梯度收敛、稳定训练过程。

标签独热编码:将 0~9 的数字标签转换为 10 维独热向量,适配 categorical_crossentropy 多分类损失函数。

3.2 完整网络搭建示例

输入层:784 维特征输入,搭配隐藏层神经元 + ReLU 激活;

多层隐藏层:堆叠多层 Dense 全连接层 + ReLU,提升特征拟合能力;

输出层:设置 10 个神经元,激活函数选用 Softmax,输出十个类别的预测概率。

3.3 模型训练与结果可视化

调用model.fit()执行训练,传入训练数据、batch_size、epochs、验证集,训练过程会实时输出每一轮的训练集准确率、损失、验证集准确率与损失:

训练集准确率持续上升、损失持续下降,代表模型在不断拟合训练数据;

验证集准确率先升后降、损失先降后升,说明模型出现过拟合;

可以通过绘制 loss、accuracy 折线图,直观观察欠拟合、过拟合现象。

3.4 模型测试、预测与错误样本分析

使用model.evaluate()在测试集上做泛化性能评估,得到模型在陌生数据上的最终准确率;

通过model.predict()对测试样本批量预测,取出预测概率最大的下标作为预测类别;

筛选出预测标签和真实标签不一致的错误样本,可视化手写图片,分析错误原因:部分手写数字本身模糊、写法怪异,人眼也容易认错;也可以通过增加网络层数、神经元数量、正则化、早停策略优化模型。

3.5 实战知识点复盘

理论落地:前几周学习的全连接网络、Sigmoid/ReLU、Softmax、交叉熵损失、梯度优化、过拟合全部在本次实战中落地验证;

工程规范:深度学习项目固定流程、数据归一化、独热编码、训练验证拆分都是工业界通用预处理手段;

调优思路:通过观察训练、验证的损失与准确率曲线,判断欠拟合与过拟合,为后续正则化、优化器调优、早停等进阶内容铺垫。

4 本周拓展思考

全连接神经网络更适合一维结构化特征,处理图像数据时需要把二维图片展平,会丢失空间位置信息,后续卷积神经网络 CNN 可以保留图片空间特征,在视觉任务上效果更好;

Adam 优化器属于自适应学习率优化算法,相比原生梯度下降,能够根据参数梯度动态调整学习率,避免学习率设置不当导致不收敛、震荡问题;

训练时划分验证集的意义:提前观测过拟合现象,不能仅依靠训练集准确率判断模型好坏,泛化能力才是深度学习模型的核心指标;

独热编码搭配多分类交叉熵损失,本质就是多分类版本的逻辑回归,多个二分类逻辑回归组合实现十分类任务,串联前期分类知识点。

总结

本周完成李宏毅第 8 讲的深度学习实战课程学习,以 MNIST 手写数字识别为入门案例,系统掌握了 Keras 高层框架的使用方法,理解了神经网络理论。
首先了解经典 MNIST 数据集任务背景与深度学习实战完整流程,明确传统手工特征方式与端到端深度学习的差异;接着学习 Keras Sequential 序列模型搭建、网络层配置、损失函数与优化器的选择规则;最后跟随课程代码完成数据集预处理、模型搭建、训练、评估、错误案例分析的全流程实操,学会通过损失、准确率曲线判断欠拟合与过拟合。

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐