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

embedded/2025/1/24 4:06:55/

卷积神经网络(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 的示例:

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()

输出结果 

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


http://www.ppmy.cn/embedded/156465.html

相关文章

Langchain+FastApi+Vue前后端Ai对话(超详细)

一、引入 首先可以先看下作者的文章 FastApi相关文章:创建最简单FastApi的项目Vue相关文章:最简单的aixos二次封装Langchain相关文章:如何使用LangSmith跟踪deepseek模型 二、后端搭建 1 项目文件结构 routers:存放api接口se…

设计模式:责任链模式——行为型模式

目录 主要角色 优点 缺点 适用场景 示例代码 普通写法: 策略模式: 总结对比 责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许多个对象有机会处理请求,从而避免请求发送者与…

在Windows/Linux/MacOS C++程序中打印崩溃调用栈和局部变量信息

打印崩溃调用栈和局部变量信息的方法有所不同。以下是针对 Windows、Linux 和 MacOS 的示例代码。 Windows 在 Windows 上&#xff0c;可以使用 Windows API 来捕获异常并打印调用栈。 #include <windows.h> #include <DbgHelp.h> #include <stdio.h> #in…

mac配置stable diffusion以及模型出图优化

1. 基础stable diffusion webui安装 使用的工程是stable-diffusion-webui&#xff0c;直接clone下来即可。 然后创建一个conda环境&#xff0c;python为3.9 激活conda环境后&#xff0c;执行./webui.sh即可。脚本会自动安装必要的包&#xff0c;然后启动网页。 默认有一个sd…

JAVA 使用反射比较对象属性的变化,记录修改日志。使用注解【策略模式】,来进行不同属性枚举值到中英文描述的切换,支持前端国际化。

1.首先定义一个接口&#xff0c;接口中有两个方法&#xff0c;分别是将属性转换成英文描述和中文描述。 其实就是将数据库中记录的 0 1 &#xff0c;转换成后面的描述 这边定义了中文转换为默认方法&#xff0c;是因为有些属性不需要进行中文转换&#xff0c;或者该属性的枚举…

PID 控制算法(二):C 语言实现与应用

在本文中&#xff0c;我们将用 C 语言实现一个简单的 PID 控制器&#xff0c;并通过一个示例来演示如何使用 PID 控制算法来调整系统的状态&#xff08;如温度、速度等&#xff09;。同时&#xff0c;我们也会解释每个控制参数如何影响系统的表现。 什么是 PID 控制器&#xf…

【JavaEE】Spring(1)

一、什么是Spring和SpringBoot Spring是Java应用程序的开发框架&#xff0c;其目的就是为了简化Java开发&#xff1b;SpringBoot是在spring框架的基础上构建的一个快速开发框架&#xff0c;其作用是进一步简化Spring程序开发 二、SpringBoot项目 2.1 创建项目 1. 设置jdk版本…

使用repo下载android源码,Ubuntu安装repo

由于网络原因&#xff0c;有时可能连接不到google&#xff0c;所以这里推荐直接使用镜像网站下载&#xff0c;并配置repo的更新源为镜像源 1 &#xff0c; 新建一个文件夹&#xff0c;从清华源下载下载git-repo到本地 git clone https://mirrors.tuna.tsinghua.edu.cn/git/git…