Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 第4章:卷积神经网络(CNN)

第4章:卷积神经网络(CNN)

4.1 卷积运算与池化

4.1.1 卷积运算基础

定义
卷积运算(Convolution Operation)是CNN的核心操作,通过滑动窗口(卷积核)在输入数据(如图像)上局部提取特征。其数学表达式为:

(f∗g)(t)=∑τ=−∞∞f(τ)⋅g(t−τ)(f * g)(t) = \sum_{\tau=-\infty}^{\infty} f(\tau) \cdot g(t - \tau) (f∗g)(t)=τ=−∞∑∞​f(τ)⋅g(t−τ)

其中,fff为输入数据,ggg为卷积核。

关键概念

  • 卷积核(Kernel):可学习的权重矩阵,尺寸通常为3×3或5×5。
  • 步长(Stride):卷积核滑动的像素间隔,影响输出尺寸。
  • 填充(Padding):在输入边缘补零以控制输出尺寸(如same或valid模式)。

示例
一个3×3卷积核在5×5输入上的运算过程(步长1,无填充):

Input:          Kernel:       Output:
[[1, 1, 1, 0, 0],  [[1, 0, 1],   [[4, 3, 4],
 [0, 1, 1, 1, 0],   [0, 1, 0],    [2, 4, 3],
 [0, 0, 1, 1, 1],   [1, 0, 1]]    [2, 3, 4]]
 [0, 0, 1, 1, 0],
 [0, 1, 1, 0, 0]]

4.1.2 池化操作

目的
降低特征图的空间维度,增强平移不变性并减少计算量。

常见类型

  1. 最大池化(Max Pooling):取窗口内最大值,保留显著特征。
    Input:  [[1, 2, 3, 4],   Output (2×2 max pooling):  [[2, 4],
            [5, 6, 7, 8],                               [6, 8]]
            [9, 10,11,12],
            [13,14,15,16]]
    
  2. 平均池化(Average Pooling):计算窗口内均值,平滑特征。

参数

  • 池化窗口大小:通常为2×2。
  • 步长:常与窗口大小一致(如步长2)。

4.1.3 卷积与池化的作用

操作功能典型参数
卷积提取局部特征(如边缘、纹理)3×3核,步长1
池化降维、防止过拟合、提升模型鲁棒性2×2窗口,步长2

可视化对比

  • 卷积前:原始图像细节丰富但冗余。
  • 卷积后:特征图突出关键模式(如垂直边缘)。
  • 池化后:特征图尺寸减半,保留主要特征。

4.1.4 代码实现示例(PyTorch)

import torch.nn as nn

# 定义卷积层 + 池化层
model = nn.Sequential(
    nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, stride=1, padding=1),
    nn.ReLU(),
    nn.MaxPool2d(kernel_size=2, stride=2),
    
    nn.Conv2d(16, 32, 3, 1, 1),
    nn.ReLU(),
    nn.MaxPool2d(2, 2)
)

# 输入: (batch_size, 3, 32, 32)
# 输出: (batch_size, 32, 8, 8)

4.1.5 常见问题

  1. 边界信息丢失:通过调整padding解决。
  2. 计算效率:使用分离卷积(Depthwise Separable Conv)优化。
  3. 池化替代方案:步长大于1的卷积可直接降维(如ResNet)。
Last Updated:: 5/20/25, 7:33 PM