《卷积神经网络 CNN 原理探秘》

embedded/2024/9/24 20:12:16/

CNN基本原理详解

       卷积神经网络(Convolutional Neural Network,简称CNN),是一种前馈神经网络,人工神经元可以响应周围单元,可以进行大型图像处理。卷积神经网络包括卷积层和池化层。
       卷积神经网络是受到生物思考方式启发的MLPs(多层感知器),它有着不同的类别层次,并且各层的工作方式和作用也不同。这里提供一个较好的CNN教程(http://cs231n.github.io/convolutional-networks/)。文章中详细介绍了CNN的计算方式和数据的流动过程,这里只做简单的介绍。

传统神经网络如下图所示

传统<a class=神经网络" />

CNN网络结构

CNN网络结构

如图所示,CNN网络工作时,会伴随着卷积并且不断转换着这些卷积。

Keras–基于python的深度学习框架

       Keras是一个高层神经网络API,Keras由纯Python编写而成并基Tensorflow、Theano以及CNTK后端。Keras 为支持快速实验而生,能够把你的idea迅速转换为结果,如果你有如下需求,请选择Keras:

  • 简易和快速的原型设计(keras具有高度模块化,极简,和可扩充特性)
  • 支持CNN和RNN,或二者的结合
  • 无缝CPU和GPU切换
    keras适用于python:2.7-3.6
    安装需要执行:
    pip install keras
    即可。

CNN基本原理

<注>:本文主要介绍CNN的基本原理,不会细说传统神经网络和神经元的知识,假定你已经了解这些。

1 CNN网络层级结构
CNN网络一共有5个层级结构:

  • 输入层
  • 卷积层
  • 激活层
  • 池化层
  • 全连接FC层

输入层

       与传统神经网络/机器学习一样,模型需要输入的进行预处理操作,常见的3中预处理方式有:

  • 去均值
  • 归一化
  • PCA/SVD降维等

卷积层

       局部感知:人的大脑识别图片的过程中,并不是一下子整张图同时识别,而是对于图片中的每一个特征首先局部感知,然后更高层次对局部进行综合操作,从而得到全局信息。
       卷积层使用“**卷积核”**进行局部感知。举个例子来讲,一个32×32×3的RGB图经过一层5×5×3的卷积后变成了一个28×28×1的特征图,那么输入层共有32×32×3=3072个神经元,第一层隐层会有28×28=784个神经元,这784个神经元对原输入层的神经元只是局部连接,如下图所示:

CNN卷积层示意
       通过局部感知特性,大大减少了模型的计算参数。但是仅仅这样还是依然会有很多参数。这就有了权值共享机制:
       在上面的局部感知中,假设有1m的隐层神经元,每个神经元1010的连接,这样就会有1m10*10个参数。实际上,对于每一层来讲,所有神经元对应的权值应该是相等的,也就是说,第一个神经元的参数向量为[w1,w2,…,w100],那么其他同层的神经元也是[w1,w2,…,w100],这就是权值共享。
       为什么需要权值共享呢?同一层下的神经元的连接参数只与特征提取的有关,而与具体的位置无关,因此可以保证同一层中所有位置的连接是权值共享的。例如:第一层隐层是一般用边缘检测,第二层是对第一层学到的边缘曲线组合得到一些特征,比如:角度、线形等;第三层会学到更加复杂的特征,比如:眼睛、眉毛等。对于同一层来说,他们提取特征的方式是一样的,第三层的神经元都是用来提取“眼睛”的特征,因此,需要计算的参数是一样的。

卷积计算示例

激励层

所谓激励,实际上是对卷积层的输出结果做一次非线性映射。
如果不用激励函数(其实就相当于激励函数是f(x)=x),这种情况下,每一层的输出都是上一层输入的线性函数。容易得出,无论有多少神经网络层,输出都是输入的线性组合,与没有隐层的效果是一样的,这就是最原始的感知机了。
常用的激励函数有:

  • Sigmoid函数
  • Tanh函数
  • ReLU
  • Leaky ReLU
  • ELU
  • Maxout
    激励层建议:首先ReLU,因为迭代速度快,但是有可能效果不加。如果ReLU失效的情况下,考虑使用Leaky ReLU或者Maxout,此时一般情况都可以解决。Tanh函数在文本和音频处理有比较好的效果。

池化层

池化(Pooling):也称为欠采样下采样。主要用于特征降维,压缩数据和参数的数量,减小过拟合,同时提高模型的容错性。主要有:

  • Max Pooling:最大池化
  • Average Pooling:平均池化

最大池化示意图
通过池化层,使得原本44的特征图压缩成了22,从而降低了特征维度。

Pooling操作
虽然人不太容易分辨出池化后的特征图,但是没关系,机器还是可以识别的。

输出层

经过前面若干次卷积+激励+池化后,终于来到了输出层,模型会将学到的一个高质量的特征图片全连接层。其实在全连接层之前,如果神经元数目过大,学习能力强,有可能出现过拟合。因此,可以引入dropout操作,来随机删除神经网络中的部分神经元,来解决此问题。还可以进行局部归一化(LRN)、数据增强等操作,来增加鲁棒性,这里不做介绍。
当来到了全连接层之后,可以理解为一个简单的多分类神经网络(如:BP神经网络),通过softmax函数得到最终的输出。整个模型训练完毕。
下图展示了一个含有多个卷积层+激励层+池化层的过程:

CNN完整过程示意图


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

相关文章

基于YOLO深度学习和百度AI接口的手势识别与控制项目

基于YOLO深度学习和百度AI接口的手势识别与控制项目 项目描述 本项目旨在开发一个手势识别与控制系统&#xff0c;该系统能够通过摄像头捕捉用户的手势&#xff0c;并通过YOLO深度学习模型或调用百度AI接口进行手势识别。识别到的手势可以用来控制计算机界面的操作&#xff0…

数据中台过时了?是否需要升级到数据飞轮?

近年来&#xff0c;随着企业数字化转型的加速&#xff0c;数据中台曾是风头正劲的技术解决方案&#xff0c;被誉为企业打破数据孤岛、提高数据利用率的关键工具。可最近你会发现越来越多的企业和技术大咖不再提数据中台&#xff0c;反而开始频繁地聊起“数据飞轮”这个新词。那…

Ubuntu下Git使用教程:从入门到实践

引言 在软件开发和版本控制领域&#xff0c;Git无疑是最为流行的工具之一。它不仅能够帮助我们高效地管理代码&#xff0c;还能促进团队协作&#xff0c;确保项目的持续集成与交付。对于使用Ubuntu操作系统的开发者而言&#xff0c;掌握Git的使用技巧尤为重要。本文将带您一步…

【AI学习笔记】初学机器学习西瓜书的知识点概要记录

初学机器学习西瓜书的知识点概要记录 1.1 机器学习1.2 典型的机器学习过程1.2 机器学习理论1.3 基本术语1.4 归纳偏好1.5 NFL定理2.1 泛化能力2.2 过拟合和欠拟合2.3 三大问题2.4 评估方法2.5 调参与验证集2.6 性能度量2.7 比较检验 以下内容出自周志华老师亲讲西瓜书 1.1 机器…

内存dump文件分析

目录 dumpsneak攻击步骤&#xff1a; dump 打开Volatility工具目录&#xff0c;C:\Users\Administrator\Desktop\应急工具集\volatility 打开运行输入volatility.exe -f 文件 imageinfo&#xff08;花费比较长的时间&#xff0c;对于这个mem文件&#xff0c;可以使用Win2012…

鸿蒙开发入门day19-使用NDK接口构建UI(一)

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;还请三连支持一波哇ヾ(&#xff20;^∇^&#xff20;)ノ&#xff09; 目录 NDK接口概述 整体架构 开发流程 接入ArkTS页面 占位组件 NDK组…

Spring Boot 杂谈

Springboot入门到精通&#xff08;超详细文档&#xff09;_springboot文档-CSDN博客

游戏开发| Unreal5.2-5.4接入chatGPT定制游戏NPC

引擎版本UE5.2 (也支持到5.4,有试用其它插件所以选择之前版本) 使用插件(免费) 1.VArest (插件官方介绍:Plugin that makes REST communications much easier.)可以让REST(Representational State Transfer)通信变得更加容易,涉及客户端与服务器之间通过 HTTP 协议…