【深度学习】常见模型-卷积神经网络(Convolutional Neural Networks, CNN)

卷积神经网络(CNN)

概念简介

卷积神经网络(Convolutional Neural Networks, CNN)是一种专门用于处理数据具有网格状拓扑结构(如图像、语音)的深度学习模型。它通过卷积操作从输入数据中提取局部特征,并逐层构建更复杂的特征表示,广泛应用于图像分类、目标检测、语音识别等领域。


关键组成部分
  1. 卷积层(Convolutional Layer)

    • 使用卷积核(滤波器)在输入上滑动,提取局部特征。
    • 每个卷积核会学习一个特定的特征,例如图像的边缘、纹理等。
  2. 激活函数(Activation Function)

    • 常用 ReLU 激活函数,使模型具有非线性能力。
    • 如:ReLU(x)=max⁡(0,x)\text{ReLU}(x) = \max(0, x)ReLU(x)=max(0,x)
  3. 池化层(Pooling Layer)

    • 减少特征图的维度,降低计算复杂度,同时保留主要特征。
    • 常见方法:最大池化(Max Pooling)和平均池化(Average Pooling)。
  4. 全连接层(Fully Connected Layer, FC Layer)

    • 将提取到的特征展平并输入到全连接神经网络,用于分类或回归任务。
  5. 损失函数(Loss Function)

    • 衡量预测值与真实值之间的差异,指导模型更新参数。
    • 常用:交叉熵损失(分类)或均方误差(回归)。

CNN 工作流程
  1. 输入图像(如 28 × 28 的灰度图片)。
  2. 通过多层卷积操作提取局部特征。
  3. 经过池化层压缩特征图的尺寸。
  4. 多次迭代后,提取高层语义特征。
  5. 最后通过全连接层输出预测结果。

代码示例

以下是使用 Keras 实现简单 CNN 的示例:

python 复制代码
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

# 构建模型
model = Sequential([
    # 卷积层 + 激活函数
    Conv2D(filters=32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)),
    # 池化层
    MaxPooling2D(pool_size=(2, 2)),

    # 第二个卷积层
    Conv2D(filters=64, kernel_size=(3, 3), activation='relu'),
    MaxPooling2D(pool_size=(2, 2)),

    # 展平层
    Flatten(),
    # 全连接层
    Dense(units=128, activation='relu'),
    # 输出层
    Dense(units=10, activation='softmax')  # 假设输出为 10 个类别
])

# 编译模型
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# 查看模型结构
model.summary()

输出结果

Matlab 复制代码
Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 conv2d (Conv2D)             (None, 26, 26, 32)        320       
                                                                 
 max_pooling2d (MaxPooling2  (None, 13, 13, 32)        0         
 D)                                                              
                                                                 
 conv2d_1 (Conv2D)           (None, 11, 11, 64)        18496     
                                                                 
 max_pooling2d_1 (MaxPoolin  (None, 5, 5, 64)          0         
 g2D)                                                            
                                                                 
 flatten (Flatten)           (None, 1600)              0         
                                                                 
 dense (Dense)               (None, 128)               204928    
                                                                 
 dense_1 (Dense)             (None, 10)                1290      
                                                                 
=================================================================
Total params: 225034 (879.04 KB)
Trainable params: 225034 (879.04 KB)
Non-trainable params: 0 (0.00 Byte)
_________________________________________________________________

特点
  • 参数共享:通过卷积核共享参数,降低模型复杂度。
  • 空间不变性:卷积操作具有平移不变性,适合图像任务。
  • 局部连接:仅连接相邻像素,减少计算负担。

应用场景
  1. 图像分类:如手写数字识别(MNIST 数据集)。
  2. 目标检测:如 YOLO、Faster R-CNN。
  3. 语义分割:如自动驾驶中的道路标记。
  4. 医疗图像处理:如肿瘤检测。
  5. 风格迁移:如图像艺术化处理。

优缺点

优点

  • 能有效提取图像、语音等数据的局部特征。
  • 参数少、计算高效。
  • 易于扩展和组合。

缺点

  • 对小数据集可能过拟合,需要数据增强或正则化。
  • 对时间序列数据不适用(适合使用 RNN 或 Transformer)。

CNN 是深度学习领域的一项革命性方法,其强大的特征提取能力让其成为许多视觉任务的首选工具。

相关推荐
赛丽曼2 小时前
机器学习-K近邻算法
人工智能·机器学习·近邻算法
大懒猫软件3 小时前
如何运用python爬虫获取大型资讯类网站文章,并同时导出pdf或word格式文本?
python·深度学习·自然语言处理·网络爬虫
啊波次得饿佛哥3 小时前
7. 计算机视觉
人工智能·计算机视觉·视觉检测
XianxinMao4 小时前
RLHF技术应用探析:从安全任务到高阶能力提升
人工智能·python·算法
Swift社区4 小时前
【分布式日志篇】从工具选型到实战部署:全面解析日志采集与管理路径
人工智能·spring boot·分布式
Quz5 小时前
OpenCV:高通滤波之索贝尔、沙尔和拉普拉斯
图像处理·人工智能·opencv·计算机视觉·矩阵
去往火星5 小时前
OpenCV文字绘制支持中文显示
人工智能·opencv·计算机视觉
海里的鱼20225 小时前
yolov11配置环境,实现OBB带方向目标检测
人工智能·yolo·目标检测·计算机视觉
道友老李5 小时前
【自然语言处理(NLP)】介绍、发展史
人工智能·自然语言处理
有Li6 小时前
基于深度学习的微出血自动检测及解剖尺度定位|文献速递-视觉大模型医疗图像应用
人工智能·深度学习