深度学习入门实战:从基础概念到手写数字识别
一、深度学习的基本概念
1.1 核心术语解析
神经网络(Neural Network) 神经网络是对人脑神经元网络的抽象模拟。它由大量相互连接的节点(神经元)组成,通过调整连接权重来学习数据中的规律。神经网络是一种运算模型,其基本单元是神经元。
本文深入讲解深度学习核心概念,涵盖神经网络原理、主流框架对比及经典模型架构。通过 TensorFlow 实战案例,详细演示 MNIST 手写数字识别任务的数据预处理、模型构建、训练优化及评估流程,帮助读者掌握从理论到落地的完整开发链路。

神经网络(Neural Network) 神经网络是对人脑神经元网络的抽象模拟。它由大量相互连接的节点(神经元)组成,通过调整连接权重来学习数据中的规律。神经网络是一种运算模型,其基本单元是神经元。
神经元(Neuron) 神经元模型包含输入、计算和输出功能。它接收多个输入信号,经过加权求和及偏置处理后,通过激活函数产生输出。
前向传播与反向传播
激活函数(Activation Function) 激活函数决定神经元的输出是否被激发。常见的激活函数包括 Sigmoid、Tanh 和 ReLU。它们引入非线性因素,使神经网络能够拟合复杂函数。
损失函数(Loss Function) 损失函数衡量模型预测结果与实际标签之间的差异。常用的有均方误差(MSE)和交叉熵损失(Cross Entropy)。优化目标是最小化损失函数。
优化算法(Optimizer) 优化算法用于迭代更新网络参数以最小化损失。常用算法包括随机梯度下降(SGD)、Adam 等。Adam 结合了动量和自适应学习率的优点,通常收敛更快。
目前业界主流的深度学习框架主要有 TensorFlow 和 PyTorch。
选型建议:若侧重学术研究或快速验证,推荐 PyTorch;若侧重工业落地及大规模部署,TensorFlow 更为稳健。
本章节将通过 MNIST 数据集,完整演示一个深度学习项目的标准流程。
MNIST 数据集包含 70,000 张 28x28 像素的手写数字灰度图。我们的目标是训练一个模型,使其能准确识别图片中的数字(0-9)。
import tensorflow as tf
from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt
# 加载 MNIST 数据集
(train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data()
print(f"训练集形状:{train_images.shape}")
print(f"测试集形状:{test_images.shape}")
观察部分训练样本,确认数据分布。
plt.figure(figsize=(10, 4))
for i in range(10):
plt.subplot(2, 5, i+1)
plt.imshow(train_images[i], cmap='gray')
plt.title(f"Label: {train_labels[i]}")
plt.axis('off')
plt.show()
将像素值缩放到 [0, 1] 区间,并增加通道维度以适应 CNN 输入要求。
# 归一化
train_images = train_images.astype('float32') / 255.0
test_images = test_images.astype('float32') / 255.0
# 重塑形状 (Batch_Size, Height, Width, Channels)
train_images = train_images.reshape(-1, 28, 28, 1)
test_images = test_images.reshape(-1, 28, 28, 1)
采用简单的 CNN 结构:卷积层 -> 池化层 -> 展平层 -> 全连接层 -> 输出层。
model = models.Sequential([
layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, (3, 3), activation='relu'),
layers.MaxPooling2D((2, 2)),
layers.Flatten(),
layers.Dense(128, activation='relu'),
layers.Dropout(0.5), # 防止过拟合
layers.Dense(10, activation='softmax')
])
model.summary()
设置优化器、损失函数和评估指标。
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 训练模型
history = model.fit(train_images, train_labels,
epochs=5,
batch_size=64,
validation_split=0.1,
verbose=1)
分析训练过程中的损失和准确率变化,判断是否存在过拟合。
acc = history.history['accuracy']
val_acc = history.history['val_accuracy']
loss = history.history['loss']
val_loss = history.history['val_loss']
epochs_range = range(len(acc))
plt.figure(figsize=(12, 4))
plt.subplot(1, 2, 1)
plt.plot(epochs_range, acc, label='Training Accuracy')
plt.plot(epochs_range, val_acc, label='Validation Accuracy')
plt.legend(loc='lower right')
plt.title('Accuracy')
plt.subplot(1, 2, 2)
plt.plot(epochs_range, loss, label='Training Loss')
plt.plot(epochs_range, val_loss, label='Validation Loss')
plt.legend(loc='upper right')
plt.title('Loss')
plt.show()
训练完成后,保存模型以便后续部署,并进行实际预测。
# 保存模型
model.save('mnist_cnn_model.h5')
# 加载模型
loaded_model = models.load_model('mnist_cnn_model.h5')
# 预测示例
predictions = loaded_model.predict(test_images)
predicted_label = predictions[0].argmax()
print(f"预测结果:{predicted_label}, 真实标签:{test_labels[0]}")
当模型在训练集表现好但在测试集表现差时,称为过拟合。解决方法包括:
当模型在训练集和测试集表现都差时,称为欠拟合。解决方法包括:
本文系统介绍了深度学习的核心概念与主流框架,并通过 TensorFlow 实战案例,详细展示了从数据预处理、模型构建、训练调优到保存部署的全流程。掌握这一流程是进入人工智能领域的重要一步。后续可进一步探索 Transformer、大模型微调等进阶主题。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online