游乐游手机版
首页/AI热点日报/热点详情

深度学习经典入门实战案例精选详细分享

类型:热点整理2026-07-23
深度学习入门讲解基本概念(神经网络、前向 反向传播、激活函数、损失函数、优化算法),对比TensorFlow和PyTorch框架特性,介绍CNN、RNN、GAN、Transformer经典模型。通过手写数字识别项目演示数据加载、模型构建、编译、训练及预测完整流程,揭示深度学习本质为反复学习、测试与调整的过程。

深度学习近年来已成为技术圈的热门话题,几乎每个算法讨论群中都离不开神经网络、训练、模型部署等关键词。但对于刚入门的学习者来说,翻开教材常常被满屏公式吓退,还没动手实践就已放弃。本文不会堆砌数学公式,而是从最基础的概念入手,逐步引导你完成一个真实的手写数字识别项目,让你切身体会深度学习究竟是如何“学习”的。

一、深度学习的基本概念

1.1 基本概念

神经网络:本质上是对人脑神经元网络的一种数学建模,简单来说,就是将大量计算单元(神经元)按特定方式连接起来,形成一个能够处理信息的网络结构。入门的第一步,就是学会如何搭建这个结构并训练它。

神经元:一个包含输入、输出和计算功能的模型,每个神经元接收多个信号,执行计算后再传递出去。

前向传播与反向传播:这是神经网络运转的核心机制。前向传播负责计算输出结果,反向传播则负责计算误差并调整参数。没有反向传播,网络将永远无法学习。

激活函数:决定神经元是否“激活”并输出信号。不同的激活函数具有不同特性,需要根据具体任务选择。

损失函数:用于衡量模型预测值与真实值之间的差距。选择合适的损失函数,才能确保训练方向正确。

优化算法:负责更新参数,使损失函数不断下降。常见的SGD和Adam各有适用场景。

1.2 深度学习框架

目前最主流的框架有两个:TensorFlow和PyTorch。它们各有优劣,选择取决于你的研究方向。

TensorFlow 2由Google开发,封装完善,上手容易。工业界更看重落地能力,国内许多企业支持TensorFlow模型的在线部署,而PyTorch在工业部署方面稍显不足。

PyTorch由Facebook推出,更受学术界青睐。最新算法论文几乎都优先提供PyTorch版本,调试体验非常友好。如果你是高校学生或研究人员,建议选择PyTorch。

Keras是一个极简、高度模块化的神经网络库,运行在TensorFlow或Theano之上,适合快速原型开发。

简单来说,TensorFlow适合大型工业项目,PyTorch则适合学术研究和小型实验。推荐使用PyTorch——原因很简单,它支持动态计算图,可以随时调整网络结构,而不像TensorFlow那样构建静态图后就“固化”了。

1.3 经典模型

熟悉以下几个经典模型,基本上就能掌握深度学习的基本脉络:

卷积神经网络(CNN):专门处理网格结构数据,如图像。它由卷积层(提取局部特征)、池化层(降维)、全连接层(输出结果)三部分组成。在图像识别、自然语言处理甚至围棋AI中都表现出色。

循环神经网络(RNN):擅长处理序列数据,如文本、语音、时间序列。其结构相比普通神经网络多了“记忆”功能。

生成对抗网络(GAN):近年来最热门的方向之一,核心思想是让两个网络相互博弈——生成器负责伪造样本,判别器负责分辨真假。经过对抗训练,生成器的造假能力可以达到以假乱真的程度。

Transformer:2017年由Google提出,基于Self-Attention机制,彻底取代了RNN在NLP领域的地位。其最大优势是支持并行计算,无需像RNN那样逐个时间步处理。

二、经典入门Demo实战

2.1 深度学习原理

将“深度学习”四个字拆开,就是“深度”+“学习”。学习是什么?举个小例子:1+1=2,我们是如何学会的?伸出一只手指,再伸出一只,数一数——两只。在这个过程中,输入是“1、+、1”,输出是“2”。机器学习的本质,就是让机器也能完成“输入→计算→输出”这一认知过程。

人类大脑依靠神经元和神经网络运作,学术界便模仿这一结构构建了人工神经网络(ANN),通常简称为神经网络。

将1+1=2放入神经网络,具体如下图所示:

我们将“1”、“+”、“1”以及正确答案“2”一同输入,反复训练(即反复告知机器答案),经过若干次后,神经网络便记住了1+1=2。接着用1+2=3继续训练,它又学会了1+2=3。如此逐个算式喂给神经网络,它就逐步掌握了加法运算,这一过程正是所谓的“深度学习”。

当然,深度学习的能力远不止算术。自动驾驶、语音识别、机器翻译、拍照翻译、人脸识别……手机里的小爱同学、地铁口的闸机,背后都离不开深度学习的助力。

2.2 一个手写数字识别的实现过程Demo

接下来通过一个手写数字识别的完整案例,带大家走一遍深度学习项目从数据到预测的完整流程。

假设我们有大量手写数字图片,目标是让机器“认识”每张图片上的数字。

整体思路非常直观:

先用6万张带标签的图片训练机器(每张图片都告知对应的数字);

训练完成后,再用1万张从未见过的图片进行测试,看机器能否正确识别;

反复执行这一过程,直到识别准确率达到足够高。

程序执行步骤为:① 训练6万张图片 ② 测试1万张图片(不参与训练) ③ 重复①②。

先不必纠结细节,看完整体代码结构后自然就会理解。

开发环境:

语言:Python 3.10.11
编译器:Jupyter Notebook
深度学习框架:TensorFlow 2.4.1

1. 准备数据

导入数据:

import tensorflow as tf
from tensorflow.keras import datasets, layers, models

# 加载数据集
(train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data()

# 输出数据形状
train_images.shape, test_images.shape
((60000, 28, 28), (10000, 28, 28))

训练集包含6万张图片,每张尺寸为28x28像素;测试集包含1万张图片。先准备好这批数据,再可视化查看其样貌。

可视化

import matplotlib.pyplot as plt

plt.figure(figsize=(20,12))
for i in range(20):
    plt.subplot(5,10,i+1)
    plt.xticks([])
    plt.yticks([])
    plt.imshow(train_images[i], cmap=plt.cm.binary)
    plt.xlabel(train_labels[i])
plt.show()

调整图片格式

程序要求输入为四维张量,因此需要reshape:

train_images = train_images.reshape((60000, 28, 28, 1))
test_images  = test_images.reshape((10000, 28, 28, 1))
train_images.shape, test_images.shape, train_labels.shape, test_labels.shape
((60000, 28, 28, 1), (10000, 28, 28, 1), (60000,), (10000,))

注意最后一个数字1表示灰度图(3表示彩色图)。

2. 构建神经网络模型

流程如下:图片输入后首先被数字化,然后卷积层提取数字特征,最后根据特征判断对应数字。结构图如下:

五层结构各自的职责:

  • 输入层:将数据送入网络
  • 卷积层:使用卷积核提取特征(相当于小型特征提取器)
  • Flatten层:将多维数据压缩为一维,便于后续全连接层处理
  • 全连接层:进一步压缩特征
  • 输出层:输出最终结果

先不必深究细节,当前目标是跑通整个流程。

model = models.Sequential([
    layers.Conv2D(32, (3, 3), input_shape=(28, 28, 1)),
    layers.Flatten(),
    layers.Dense(100),
    layers.Dense(10)
])

3. 编译模型

这一步需要配置优化器(帮助模型训练)、损失函数(衡量预测值与真实值的差异)以及评价函数(评估模型质量)。

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

4. 训练模型

将数据分为两部分:训练集用于训练,验证集用于监测效果。epochs表示训练轮数。

history = model.fit(train_images, train_labels, epochs=3,
                    validation_data=(test_images, test_labels))

5. 预测

先查看待预测的图片:

plt.imshow(test_images[1])

输出预测数组:

pre = model.predict(test_images)
pre[1]
array([ 12.474585 ,   1.1173537,  21.654232 ,  16.206923 , -10.989567 ,
       17.235504 ,  19.404213 , -22.553476 ,  13.221286 , -10.19972  ],
      dtype=float32)

该数组对应数字0~9,其中值最大的索引即为预测结果:

import numpy as np
pre_num = np.argmax(pre[1])
print("模型的预测结果为:", pre_num)
模型的预测结果为:2

总结

从“1+1=2”到“手写数字识别”,我们一步步拆解了深度学习的本质,并用TensorFlow亲手跑通了一个完整项目。现在你应该已经明白:深度学习并非神秘的黑盒,它本质上就是一个反复“学习→测试→调整”的过程。接下来的道路,就是自己去调参、换模型、处理更多数据了。

来源:https://m.elecfans.com/article/2729578.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。