深度学习入门-CNN

news2025/1/18 15:02:47

一、CNN是什么

       CNN,即卷积神经网络(convolutional neural network),是用于预测的标准神经网络架构。在人工智能的广阔领域中,CNN被用于图像识别、语音识别等各种场合,CNN通过模拟人类视觉皮层的神经元连接方式,能够自动提取图像中的特征,从而实现对图像的高效理解和处理 。

二、CNN的基本原理

1. 卷积操作

       卷积操作是CNN的核心运算,它通过在输入数据上滑动一个滤波器(或称为卷积核)来提取局部特征。卷积核是一个小型的权重矩阵,它与输入数据的局部区域进行逐元素相乘并求和,生成一个特征图(Feature Map)。这一过程可以形象地理解为用一个“小窗口”在图像上滑动,每次只关注窗口内的内容,并将其转换为一个特征值。卷积操作能够有效地捕捉图像中的局部模式,如边缘、纹理和形状等,且具有参数共享和稀疏连接的特点,大大减少了模型的参数数量,提高了计算效率。

2. 池化操作

       池化(Pooling)操作通常紧跟在卷积层之后,其目的是降低特征图的空间维度,减少计算量和参数数量,同时保留重要的特征信息。常见的池化方法有最大池化(Max Pooling)和平均池化(Average Pooling)。最大池化取局部区域内的最大值作为输出,能够突出显著特征;平均池化则取局部区域内的平均值,相对较为平滑。池化操作不仅能够减少数据的维度,还能提供一定程度的平移不变性,使模型对输入数据的小范围平移具有鲁棒性。

3. 激活函数

       激活函数为CNN引入了非线性因素,使得网络能够学习和模拟复杂的函数映射关系。常用的激活函数有ReLU(Rectified Linear Unit)、Sigmoid和Tanh等。ReLU函数因其计算简单、能够有效缓解梯度消失问题而在CNN中广泛使用,其表达式为f(x) = max(0, x)。Sigmoid函数和Tanh函数则能够将输入数据映射到(0, 1)和(-1, 1)的范围内,适用于需要将数据归一化的场景,但在深层网络中可能会导致梯度消失问题。

  • ReLU(Rectified Linear Unit)

  f(x) = max(0, x),计算简单,能够有效缓解梯度消失问题,是CNN中常用的激活函数。

  • Sigmoid

   f(x) = 1 / (1 + exp(-x)),将输入数据映射到(0, 1)的范围内,适用于需要将数据归一化的场景,但在深层网络中可能会导致梯度消失问题。

  • Tanh

   f(x) = (exp(x) - exp(-x)) / (exp(x) + exp(-x)),将输入数据映射到(-1, 1)的范围内,相对Sigmoid函数更加对称,但在深层网络中也可能会导致梯度消失问题。

三、CNN的构成

1. 输入层(Input Layer)

       输入层是CNN接收数据的入口,其主要作用是将原始数据(如图像)传递给后续的网络层。对于图像数据,输入层通常包含多个通道,分别对应图像的红、绿、蓝(RGB)颜色通道。输入层的尺寸取决于图像的分辨率,例如,对于一张224x224像素的RGB图像,输入层的尺寸为224x224x3。

2. 卷积层(Convolutional Layer)

       卷积层是CNN中实现特征提取的关键层,通过卷积操作将输入数据转换为特征图。每个卷积层包含多个卷积核,每个卷积核负责提取一种特定的特征。卷积层的输出特征图数量等于卷积核的数量。卷积层可以有多个,随着网络的加深,卷积层提取的特征从低级的边缘、纹理逐渐转变为高级的语义信息。

  • 卷积核(Filter)

       卷积核的大小(如3x3、5x5)和数量决定了卷积层的特征提取能力。每个卷积核提取一种特定的特征,如边缘、纹理或形状。

  • 步长(Stride)

       步长决定了卷积核在输入数据上移动的步长。步长为1表示每次移动一个像素,步长为2表示每次移动两个像素,依此类推。较大的步长可以减少特征图的尺寸,但可能会丢失一些细节信息。

  • 填充(Padding)

      填充用于在输入数据的边缘添加零值,以保持特征图的尺寸。常用的填充方式有“valid”(不填充)和“same”(保持特征图尺寸不变)。

3. 池化层(Pooling Layer)

      池化层用于降低特征图的空间维度,减少计算量和参数数量,同时保留重要特征。池化层通常紧跟在卷积层之后,对卷积层输出的特征图进行下采样。池化操作可以是最大池化或平均池化,步长和池化窗口大小是池化层的两个重要参数。步长决定了池化窗口移动的步长,池化窗口大小决定了每次池化操作的范围。

  • 最大池化(Max Pooling)

      取局部区域内的最大值作为输出,能够突出显著特征。

  • 平均池化(Average Pooling)

      取局部区域内的平均值,相对较为平滑。

  • 池化窗口大小(Pool Size)

      池化窗口的大小决定了每次池化操作的范围。常用的池化窗口大小为2x2。

  • 步长(Stride)

     池化操作的步长决定了池化窗口移动的步长。通常,池化窗口的步长等于池化窗口的大小,以避免重叠。

4. 全连接层(Fully Connected Layer)

       全连接层是CNN中实现分类或回归的关键层,其输入是卷积层和池化层提取的特征图,输出是最终的预测结果。全连接层的神经元与前一层的特征图中的所有神经元相连,通过学习权重矩阵将特征图转换为预测输出。在分类任务中,全连接层的输出神经元数量通常与类别数量相等;在回归任务中,全连接层通常只有一个输出神经元。全连接层的权重矩阵是通过反向传播算法学习得到的,其目的是最小化预测输出与真实标签之间的差异。

  • 输入特征

       全连接层的输入特征是卷积层和池化层提取的特征图,通常需要将特征图展平为一维向量。

  • 输出神经元

      在分类任务中,全连接层的输出神经元数量通常与类别数量相等;在回归任务中,全连接层通常只有一个输出神经元。

  • 权重矩阵

      全连接层的权重矩阵是通过反向传播算法学习得到的,其目的是最小化预测输出与真实标签之间的差异。

四、CNN的训练过程

1. 前向传播(Forward Propagation)

       前向传播是CNN训练过程中的第一步,其目的是计算网络的预测输出。在前向传播过程中,输入数据依次通过输入层、卷积层、池化层和全连接层,最终得到预测输出。每个卷积层通过卷积操作提取特征图,每个池化层对特征图进行下采样,全连接层将特征图转换为预测输出。前向传播过程可以表示为一系列矩阵运算和非线性变换,其计算效率较高,适用于大规模数据的处理。

2. 损失函数(Loss Function)

       损失函数用于衡量网络预测输出与真实标签之间的差异,是训练CNN的优化目标。常见的损失函数有均方误差损失(Mean Squared Error,MSE)和交叉熵损失(Cross-Entropy Loss)。均方误差损失适用于回归任务,其计算预测输出与真实标签之间的平方差的均值;交叉熵损失适用于分类任务,其计算预测概率分布与真实概率分布之间的交叉熵。损失函数的值越小,表示网络的预测输出越接近真实标签,模型的性能越好。

3. 反向传播(Backward Propagation)

       反向传播是CNN训练过程中的关键步骤,其目的是通过计算损失函数对网络权重的梯度,更新网络权重,使损失函数的值最小化。在反向传播过程中,首先计算损失函数对预测输出的梯度,然后依次计算全连接层、池化层和卷积层的权重梯度。每个层的权重梯度通过链式法则计算得到,其计算过程涉及矩阵运算和导数计算。反向传播过程的核心是梯度下降算法,其通过迭代更新网络权重,使损失函数的值逐渐减小,最终使网络收敛到最优解。

4. 优化算法(Optimization Algorithm)

        优化算法用于更新网络权重,使损失函数的值最小化。常见的优化算法有随机梯度下降(Stochastic Gradient Descent,SGD)、动量优化算法(Momentum)、Adagrad、RMSprop和Adam等。SGD是最基本的优化算法,其通过计算损失函数对网络权重的梯度,更新网络权重;动量优化算法在SGD的基础上引入了动量项,能够加速收敛并减少震荡;Adagrad、RMSprop和Adam等优化算法则通过自适应调整学习率,提高了优化过程的效率和稳定性。优化算法的选择对CNN的训练效果和收敛速度有重要影响,需要根据具体任务和数据集进行选择。

五、CNN的实际应用

1. 图像分类

      图像分类是CNN最经典的应用之一,其目的是将输入图像划分到预定义的类别中。例如,ImageNet Large Scale Visual Recognition Challenge(ILSVRC)是一个大规模的图像分类竞赛,参赛者需要将输入图像分类到1000个不同的类别中。CNN在这一任务中取得了显著的性能提升,超越了传统的图像分类方法。通过构建深层的CNN架构,如AlexNet、VGGNet、GoogLeNet和ResNet等,研究者们实现了对大规模图像数据的高效分类,推动了图像识别技术的发展。

2. 目标检测

       目标检测是图像识别领域的另一个重要任务,其目的是在图像中定位和识别多个目标对象。CNN在目标检测中也发挥了重要作用,通过结合区域提议(Region Proposal)和分类器,实现了对图像中目标对象的准确定位和分类。例如,R-CNN(Region-based Convolutional Neural Networks)、Fast R-CNN和Faster R-CNN等算法通过使用CNN提取图像特征,结合区域提议网络(Region Proposal Network,RPN)生成候选区域,实现了对图像中目标对象的高效检测。这些算法在PASCAL VOC、COCO等目标检测数据集上取得了优异的性能,推动了目标检测技术的发展。

3. 语义分割

       语义分割是图像识别领域的高级任务,其目的是将图像中的每个像素划分到预定义的类别中。与图像分类和目标检测不同,语义分割需要对图像进行像素级的分类,因此对模型的精度和鲁棒性要求更高。CNN在语义分割中也取得了显著的成果,通过结合全卷积网络(Fully Convolutional Networks,FCN)、U-Net等架构,实现了对图像的高效语义分割。这些架构通过使用卷积层和上采样层,将图像中的每个像素映射到对应的类别,实现了对图像的精细分割。语义分割技术在医学图像分析上发挥了很大的作用。

本文参考书籍:

《深度学习入门:基于python的理论与实现》

《Python深度学习入门:从零构建CNN和RNN》

本文仅为个人学习使用所写。

本文有AI成分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2278517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索 Transformer²:大语言模型自适应的新突破

目录 一、来源: 论文链接:https://arxiv.org/pdf/2501.06252 代码链接:SakanaAI/self-adaptive-llms 论文发布时间:2025年1月14日 二、论文概述: 图1 Transformer 概述 图2 训练及推理方法概述 图3 基于提示的…

【北京迅为】iTOP-4412全能版使用手册-第八十七章 安装Android Studio

iTOP-4412全能版采用四核Cortex-A9,主频为1.4GHz-1.6GHz,配备S5M8767 电源管理,集成USB HUB,选用高品质板对板连接器稳定可靠,大厂生产,做工精良。接口一应俱全,开发更简单,搭载全网通4G、支持WIFI、蓝牙、…

LDD3学习8--linux的设备模型(TODO)

在LDD3的十四章,是Linux设备模型,其中也有说到这个部分。 我的理解是自动在应用层也就是用户空间实现设备管理,处理内核的设备事件。 事件来自sysfs和/sbin/hotplug。在驱动中,只要是使用了新版的函数,相应的事件就会…

Jira中bug的流转流程

Jira中bug的状态 1. 处理Bug的流程2. bug状态流转详述bug的状态通常包括 1. 处理Bug的流程 2. bug状态流转详述 bug的状态通常包括 未解决 1. 测试人员创建一个bug,填写bug的详细信息,如概要、bug级别、复现步骤、现状、预期结果等 2. 定位bug&#x…

解决关于Xcode16提交审核报错

# 问题描述 The following issues occurred while distributing your application. Asset validation failed Invalid Executable. The executable xxx.app/Frameworks/HappyDNS.framework/HappyDNS contains bitcode.(lD:ef5dd249-731f-4731-8173-8e4a12519352) Asset valida…

windows下安装并使用node.js

一、下载Node.js 选择对应你系统的Node.js版本下载 Node.js官网下载地址 Node.js中文网下载地址??? 这里我选择的是Windows64位系统的Node.js20.18.0(LTS长期支持版本)版本的.msi安装包程序 官网下载: 中文网下载: 二、安…

基于SpringBoot+Vue旅游管理系统的设计和实现(源码+文档+部署讲解)

个人名片 🔥 源码获取 | 毕设定制| 商务合作:《个人名片》 ⛺️心若有所向往,何惧道阻且长 文章目录 个人名片环境需要技术栈功能介绍功能说明 环境需要 开发语言:Java 框架:springboot JDK版本:JDK1.8 数据库&…

python之二维几何学习笔记

一、概要 资料来源《机械工程师Python编程:入门、实战与进阶》安琪儿索拉奥尔巴塞塔 2024年6月 点和向量:向量的缩放、范数、点乘、叉乘、旋转、平行、垂直、夹角直线和线段:线段中点、离线段最近的点、线段的交点、直线交点、线段的垂直平…

RabbitMQ---消息确认和持久化

(一)消息确认 1.概念 生产者发送消息后,到达消费端会有以下情况: 1.消息处理成功 2.消息处理异常 如果RabbitMQ把消息发送给消费者后就把消息删除,那么就可能会导致,消息处理异常想要再获取这条消息的时…

map和set c++

关联式容器也是⽤来存储数据的,与序列式容器不同的是,关联式容器逻辑结构通常是⾮线性结构,两个位置有紧密的关联关系,交换⼀下,他的存储结构就被破坏了。顺序容器中的元素是按关键字来保存和访问的。关联式容器有map/…

turtle教学课程课堂学习考试在线网站

完整源码项目包获取→点击文章末尾名片!

Digital Document System (DDS)

Digital Document System (DDS) 数字档案平台 信息注入

Springer Nature——Applied Intelligence 投稿指南

投稿系统:Editorial Manager (Manuscript and Peer Review) : 使用Editorial Manager 投稿系统的期刊列表:期刊列表 期刊主页:Spring Nature 主页 投稿主页:Spring Nature Submit SystemSubmission Guidelines: Official Submissi…

如何在前端给视频进行去除绿幕并替换背景?-----Vue3!!

最近在做这个这项目奇店桶装水小程序V1.3.9安装包骑手端V2.0.1小程序前端 最近,我在进行前端开发时,遇到了一个难题“如何给前端的视频进行去除绿幕并替换背景”。这是一个“数字人项目”所需,我一直在冥思苦想。终于有了一个解决方法…

使用python+pytest+requests完成自动化接口测试(包括html报告的生成和日志记录以及层级的封装(包括调用Json文件))

一、API的选择 我们进行接口测试需要API文档和系统,我们选择JSONPlaceholder免费API,因为它是一个非常适合进行接口测试、API 测试和学习的工具。它免费、易于使用、无需认证,能够快速帮助开发者模拟常见的接口操作(增、删、改、…

UE4原生的增量Cook原理

设置Cook的步骤后&#xff0c;断点进入到如下堆栈&#xff1a; UCookOnTheFlyServer::StartCookByTheBook(const UCookOnTheFlyServer::FCookByTheBookStartupOptions &) CookOnTheFlyServer.cpp:7723 UCookCommandlet::CookByTheBook(const TArray<…> &, TArr…

C#表达式和运算符

本文我们将学习C#的两个重要知识点&#xff1a;表达式和运算符。本章内容会理论性稍微强些&#xff0c;我们会尽量多举例进行说明。建议大家边阅读边思考&#xff0c;如果还能边实践就更好了。 1. 表达式 说到表达式&#xff0c;大家可能感觉有些陌生&#xff0c;我们先来举个…

蓝桥杯 Python 组知识点容斥原理

容斥原理 这张图初中或者高中数学课应该画过 也就是通过这个简单的例子引出容斥原理的公式 这张图的面积&#xff1a;s1 s3 s7 - 2 * s2 - 2 * s4 - 2 * s6 3 * s5 通过此引导出容斥原理公式 那么下面来一起看看题目 题目描述 给定 n,m 请求出所有 n 位十进制整数中有多…

PDF文件提取开源工具调研总结

概述 PDF是一种日常工作中广泛使用的跨平台文档格式&#xff0c;常常包含丰富的内容&#xff1a;包括文本、图表、表格、公式、图像。在现代信息处理工作流中发挥了重要的作用&#xff0c;尤其是RAG项目中&#xff0c;通过将非结构化数据转化为结构化和可访问的信息&#xff0…

PDF编辑 PDF-XChange Editor Plus 免装优化版

PDF编辑器很多打工人都需要用到&#xff0c;也分享过好几款口碑不错的&#xff0c;这次这款PDF依旧值得你的期待。 PDF-XChange Editor&#xff0c;号称打开速度最快最强大的PDF编辑器/PDF阅读器&#xff0c;专注于PDF文档的编辑&#xff0c;可以自定义制作PDF电子文档&#xf…