跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

深度学习卷积神经网络(CNN)实战应用

卷积神经网络通过卷积层提取图像局部特征,池化层降低维度防止过拟合。LeNet-5 是经典架构,包含卷积、池化及全连接层。实战中利用 TensorFlow 搭建模型处理 MNIST 手写数字识别,通过 Dropout、ReLU 激活函数及批量归一化优化模型泛化能力,解决训练集准确率上升而验证集下降的问题。

性能调优发布于 2026/3/26更新于 2026/7/2840 浏览
深度学习卷积神经网络(CNN)实战应用

深度学习卷积神经网络(CNN)实战应用

在这里插入图片描述

1.1 本章学习目标与重点

💡 学习目标:掌握卷积神经网络的核心原理、经典网络架构,以及在图像分类任务中的实战开发流程。 💡 学习重点:理解卷积层、池化层的工作机制,学会使用 TensorFlow 搭建 CNN 模型并完成训练与评估。

1.2 卷积神经网络核心原理

1.2.1 卷积层:提取图像局部特征

💡 卷积层是 CNN 的核心组件,其作用是通过卷积核对输入图像进行局部特征提取。 卷积核本质是一个小型的权重矩阵。它会按照设定的步长在图像上滑动。每滑动一次,卷积核就会与对应区域的像素值做内积运算,输出一个特征值。 这个过程可以捕捉图像的边缘、纹理等基础特征。 ⚠️ 注意:卷积核的数量决定了输出特征图的通道数,数量越多,提取的特征维度越丰富。

① 定义一个 3×3 大小的卷积核,步长设为 1,填充方式为 SAME ② 对 28×28 单通道的手写数字图像进行卷积操作 ③ 输出特征图的尺寸保持 28×28,通道数由卷积核数量决定

import tensorflow as tf
from tensorflow.keras.layers import Conv2D

# 定义卷积层
conv_layer = Conv2D(filters=32, kernel_size=(3,3), strides=(1,1), padding="SAME", input_shape=(28,28,1))

# 模拟输入:1 张 28×28 单通道图像
input_image = tf.random.normal(shape=(1,28,28,1))

# 执行卷积运算
output_feature = conv_layer(input_image)
print("输出特征图形状:", output_feature.shape)
1.2.2 池化层:降低特征维度与防止过拟合

💡 池化层的作用是对卷积层输出的特征图进行降采样。它可以在保留关键特征的同时,减少参数数量和计算量。 常见的池化方式有两种:最大池化和平均池化。 最大池化选取局部区域内的最大值作为输出,能更好保留纹理特征。平均池化选取局部区域的平均值,能保留背景特征。

① 定义 2×2 大小的最大池化层,步长设为 2 ② 对卷积层输出的特征图进行池化操作 ③ 输出特征图的尺寸会缩小为原来的 1/2

from tensorflow.keras.layers import MaxPooling2D

# 定义最大池化层
pool_layer = MaxPooling2D(pool_size=(2,2), strides=(2,2), padding="SAME")

# 对卷积层输出的特征图做池化
pool_output = pool_layer(output_feature)
print("池化后特征图形状:", pool_output.shape)

1.3 经典 CNN 架构——LeNet-5

💡 LeNet-5 是由 Yann LeCun 提出的经典卷积神经网络。它专门用于手写数字识别任务,奠定了现代 CNN 的基础架构。 LeNet-5 的结构分为 5 层:2 个卷积层、2 个池化层、1 个全连接层,最后通过 Softmax 输出分类结果。

1.3.1 LeNet-5 网络结构搭建
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Flatten, Dense

# 搭建 LeNet-5 模型
lenet5 = Sequential([
    # 卷积层 1:6 个 5×5 卷积核,步长 1,无填充
    Conv2D(filters=6, kernel_size=(5,5), strides=(1,1), padding="VALID", input_shape=(28,28,1), activation="tanh"),
    # 池化层 1:2×2 最大池化,步长 2
    MaxPooling2D(pool_size=(2,2), strides=(2,2), padding="VALID"),
    # 卷积层 2:16 个 5×5 卷积核,步长 1,无填充
    Conv2D(filters=16, kernel_size=(5,5), strides=(1,1), padding="VALID", activation="tanh"),
    # 池化层 2:2×2 最大池化,步长 2
    MaxPooling2D(pool_size=(2,2), strides=(2,2), padding="VALID"),
    # 展平层:将特征图转为一维向量
    Flatten(),
    # 全连接层 1:120 个神经元
    Dense(units=120, activation="tanh"),
    # 全连接层 2:84 个神经元
    Dense(units=84, activation="tanh"),
    # 输出层:10 个神经元对应 10 个数字类别,Softmax 激活
    Dense(units=10, activation="softmax")
])

# 查看模型结构
lenet5.summary()
1.3.2 LeNet-5 模型编译与训练

💡 本次实战使用 MNIST 手写数字数据集。这个数据集包含 60000 张训练图像和 10000 张测试图像,每张图像都是 28×28 的灰度图。

① 加载 MNIST 数据集并进行归一化处理 ② 编译模型:选择 Adam 优化器、交叉熵损失函数 ③ 训练模型:设置批次大小 32,训练轮数 10 轮

from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical

# 1. 加载并预处理数据
(x_train, y_train),(x_test, y_test)= mnist.load_data()

# 归一化:将像素值从 0-255 转为 0-1
x_train = x_train /255.0
x_test = x_test /255.0

# 增加通道维度:(样本数,28, 28) → (样本数,28, 28, 1)
x_train = tf.expand_dims(x_train, axis=-1)
x_test = tf.expand_dims(x_test, axis=-1)

# 标签独热编码
y_train = to_categorical(y_train, num_classes=10)
y_test = to_categorical(y_test, num_classes=10)

# 2. 编译模型
lenet5.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"])

# 3. 训练模型
history = lenet5.fit(x_train, y_train, batch_size=32, epochs=10, validation_split=0.1)

# 4. 评估模型
test_loss, test_acc = lenet5.evaluate(x_test, y_test)
print(f"测试集准确率:{test_acc:.4f}")

1.4 实战问题与解决方案

1.4.1 过拟合问题处理

⚠️ 问题:训练过程中,训练集准确率持续上升,但验证集准确率出现下降。这就是过拟合现象。 💡 解决方案:加入Dropout 层随机丢弃部分神经元,防止模型过度依赖某些特征。

在全连接层后加入 Dropout 层的示例代码:

from tensorflow.keras.layers import Dropout

# 修改模型,加入 Dropout 层
lenet5_with_dropout = Sequential([
    Conv2D(6,(5,5), strides=1, padding="VALID", input_shape=(28,28,1), activation="tanh"),
    MaxPooling2D((2,2), strides=2, padding="VALID"),
    Conv2D(16,(5,5), strides=1, padding="VALID", activation="tanh"),
    MaxPooling2D((2,2), strides=2, padding="VALID"),
    Flatten(),
    Dense(120, activation="tanh"),
    Dropout(0.2),# 丢弃 20% 的神经元
    Dense(84, activation="tanh"),
    Dropout(0.2),
    Dense(10, activation="softmax")
])
lenet5_with_dropout.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"])
1.4.2 模型优化技巧

💡 技巧 1:使用ReLU 激活函数替换 tanh 函数。ReLU 能缓解梯度消失问题,加速模型收敛。 💡 技巧 2:使用批量归一化(BatchNormalization)。它可以使每一层的输入分布更稳定,提升训练效率。 💡 技巧 3:调整学习率。使用学习率衰减策略,在训练后期降低学习率,让模型更精准收敛。

1.5 本章总结

✅ 卷积层通过卷积核提取图像局部特征,池化层通过降采样减少参数与计算量。 ✅ LeNet-5 是经典 CNN 架构,由卷积层、池化层、全连接层组成,适用于小尺寸图像分类。 ✅ 实战中可通过加入 Dropout 层、使用 ReLU 激活函数等方法优化模型,提升泛化能力。

目录

  1. 深度学习卷积神经网络(CNN)实战应用
  2. 1.1 本章学习目标与重点
  3. 1.2 卷积神经网络核心原理
  4. 1.2.1 卷积层:提取图像局部特征
  5. 定义卷积层
  6. 模拟输入:1 张 28×28 单通道图像
  7. 执行卷积运算
  8. 1.2.2 池化层:降低特征维度与防止过拟合
  9. 定义最大池化层
  10. 对卷积层输出的特征图做池化
  11. 1.3 经典 CNN 架构——LeNet-5
  12. 1.3.1 LeNet-5 网络结构搭建
  13. 搭建 LeNet-5 模型
  14. 查看模型结构
  15. 1.3.2 LeNet-5 模型编译与训练
  16. 1. 加载并预处理数据
  17. 归一化:将像素值从 0-255 转为 0-1
  18. 增加通道维度:(样本数,28, 28) → (样本数,28, 28, 1)
  19. 标签独热编码
  20. 2. 编译模型
  21. 3. 训练模型
  22. 4. 评估模型
  23. 1.4 实战问题与解决方案
  24. 1.4.1 过拟合问题处理
  25. 修改模型,加入 Dropout 层
  26. 1.4.2 模型优化技巧
  27. 1.5 本章总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • llama.cpp Docker 镜像国内加速下载方案
  • 普通人如何利用 AI 技术实现价值变现与职业转型
  • 波士顿动力机器人技术解析:从 Spot 到 Atlas
  • 即梦数字人视频生成 API 调用示例
  • C++26 标准前瞻:std::execution 的六种高效调度模式
  • Open Notebook 开源工具:简介、安装部署与案例应用详解
  • Claude Code 与 GLM-4.6 环境配置指南 (Windows/macOS/Ubuntu)
  • 基于 Vue 的 Qwen-Image-Edit-F2P 前端交互界面实现
  • 25 个实用 Prompt 技巧:如何有效降低内容 AI 检测率
  • Webnovel Writer:基于 Claude Code 的长篇网文 AI 创作系统
  • Blender 插件 Cats 用于 VRChat 模型优化指南
  • LoRA 微调技术详解:Stable Diffusion 模型的高效适配方案
  • ClawPanel:OpenClaw 智能管理面板,支持 20+ 通道与多模型配置
  • 2023 年数据分析职业发展与薪资前景分析
  • Stable Diffusion WebUI Windows 部署与常见报错解决方案
  • HY-Motion 1.0 基于 Windows WSL2 部署 Gradio WebUI 全流程
  • FastGithub 部署指南:智能 DNS 解析优化 GitHub 访问
  • 使用 JDBC 连接 MySQL 数据库实战指南
  • Windows 系统安装 RabbitMQ 及 Erlang 环境配置指南
  • 大语言模型(LLM)工作原理通俗解析

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online