热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

卷积神经网络(CNN)的原理和我对其的个人理解

文章目录

  • 一、卷积运算
    • 对比数学中的卷积运算
  • 二、**函数
  • 三、池化层
  • 四、输入输出通道
  • 五、参考文章

卷积神经网络,也就是convolutional neural networks (简称CNN)
卷积神经网络的主要核心结构:输入->卷积+**函数->池化->输出

一、卷积运算

卷积神经网络(CNN)原理以及个人理解
盗图1

中间黑色大图就是我们的输入数据。蓝色框就是我们的卷积核所在的位置
左上角为卷积核(大小是3*3)。将卷积核这个“小纸片”,盖到原图的大纸片上,卷积核与原图对应位置的数据作乘法,并写到相应的地方,作为运算的结果。

卷积神经网络(CNN)原理以及个人理解盗图2

整个蓝色框计算结束后,我们会得到一个充满数据的新框框(上分白色小正方形)。然后我们需要对其求**均值**,让这个均值作为这片区域特征的一个代表。

均值只是一种处理方式,也可以使用求和作为区域特征的代表。一样可以实现核心思想:框内每个小格的值越大,和卷积核的特征越符合

新的理解:可以把卷积核当做一个滤波器,传入图像为信号。越符合滤波器(卷积核)的信号(图像),通过卷积核后保留的部分越多(乘积越大)。

卷积神经网络(CNN)原理以及个人理解盗图3
卷积神经网络(CNN)原理以及个人理解盗图4

盖上卷积核,计算对应位置乘积,然后求均值。接下来按照给定的stride(步长)进行卷积核的移动,直到把整个输入都完全覆盖。stride=1,向平移1格
将整个图计算一遍之后,会得到一个特征图(feature map)。特征图是输入通过卷积核运算后,反映特征的所在位置的图。(特征图size必定比输入size小,除非kernel_size = 1)

卷积神经网络(CNN)原理以及个人理解盗图5

在取值(-1,1)的灰度图中,越接近1,表示这片区域的特征越匹特配。越接近-1,和特征的反面越匹配。越接近0,说明和特征的匹配不明显。

卷积神经网络(CNN)原理以及个人理解盗图6 不同的卷积核(滤波器)运算后的结果

对比数学中的卷积运算

卷积的数学公式:
连续:
(fg)(n)=+f(τ)g(nτ)dτ(f*g)(n)=\int ^{+\infty}_ {-\infty} f(\tau) g(n-\tau){\rm d}\tau
离散:
(fg)(n)=+f(τ)g(nτ)dτ(f*g)(n)=\sum ^{+\infty}_ {-\infty} f(\tau) g(n-\tau){\rm d}\tau

PS:关于卷积有意思的解释。卷积的数学意义在于加权叠加。怎么理解呢?
另外一个关于卷积的有意思的解释
看了好多关于卷积的答案,看到这个例子才彻底地理解了这个过程~
关于卷积的一个血腥的讲解
比如说你的老板命令你干活,你却到楼下打台球去了,后来被老板发现,他非常气愤,扇了你一巴掌(注意,这就是输入信号,脉冲),于是你的脸上会渐渐地(贱贱地)鼓起来一个包,你的脸就是一个系统,而鼓起来的包就是你的脸对巴掌的响应,好,这样就和信号系统建立起来意义对应的联系。下面还需要一些假设来保证论证的严谨:假定你的脸是线性时不变系统,也就是说,无论什么时候老板打你一巴掌,打在你脸的同一位置(这似乎要求你的脸足够光滑,如果你说你长了很多青春痘,甚至整个脸皮处处连续处处不可导,那难度太大了,我就无话可说了哈哈),你的脸上总是会在相同的时间间隔内鼓起来一个相同高度的包来,并且假定以鼓起来的包的大小作为系统输出。好了,那么,下面可以进入核心内容——卷积了!
如果你每天都到地下去打台球,那么老板每天都要扇你一巴掌,不过当老板打你一巴掌后,你5分钟就消肿了,所以时间长了,你甚至就适应这种生活了……如果有一天,老板忍无可忍,以0.5秒的间隔开始不间断的扇你的过程,这样问题就来了,第一次扇你鼓起来的包还没消肿,第二个巴掌就来了,你脸上的包就可能鼓起来两倍高,老板不断扇你,脉冲不断作用在你脸上,效果不断叠加了,这样这些效果就可以求和了,结果就是你脸上的包的高度随时间变化的一个函数了(注意理解);如果老板再狠一点,频率越来越高,以至于你都辨别不清时间间隔了,那么,求和就变成积分了。可以这样理解,在这个过程中的某一固定的时刻,你的脸上的包的鼓起程度和什么有关呢?和之前每次打你都有关!但是各次的贡献是不一样的,越早打的巴掌,贡献越小,所以这就是说,某一时刻的输出是之前很多次输入乘以各自的衰减系数之后的叠加而形成某一点的输出,然后再把不同时刻的输出点放在一起,形成一个函数,这就是卷积,卷积之后的函数就是你脸上的包的大小随时间变化的函数。本来你的包几分钟就可以消肿,可是如果连续打,几个小时也消不了肿了,这难道不是一种平滑过程么?反映到剑桥大学的公式上,f(a)就是第a个巴掌,g(x-a)就是第a个巴掌在x时刻的作用程度,乘起来再叠加就ok了,大家说是不是这个道理呢?我想这个例子已经非常形象了,你对卷积有了更加具体深刻的了解了吗?

数学卷积公式和卷积神经网络相关性体现
卷积神经网络中的卷积运算,和数学当中的卷积也是有联系的。卷积之所以能提取特征,是因为输入信号和滤波器(卷积核)的相关性,反映到了输出当中。我想要的特征,反映在卷积核上,输入图片的特征和卷积核越是相似,输出越大(被过滤的越少)

二、**函数

卷积神经网络(CNN)原理以及个人理解盗图7

**函数的目的是进一步的筛选数据特征。举例常见的Relu函数:当x<=0,y=0;x>0,y=x。对于小于0的部分,经过**函数后,被抹除。而大于0的部分,特征的情况得以保留。

三、池化层

池化的目的是为了进一步的减少无关信息,突出有效信息的部分。

以max_pool为例:
max_pool将区域内的最大值进行输出。然后根据设定的ride(步长)进行移动。卷积神经网络(CNN)原理以及个人理解盗图8
卷积神经网络(CNN)原理以及个人理解盗图9

四、输入输出通道

卷积神经网络(CNN)原理以及个人理解盗图10

如图,28*28的原始输入,分成3个通道输出,进入卷积层运算。每个卷积的通道之间互相独立(权重、偏移不共享)。单个卷积通道的权重和偏移量(bias)共享。

输入的通道数取决于上一层。例如原始输入为彩色图时,可以三通道(RGB)作为卷积层的输入通道。若为灰度图,可以一通道输入。

五、参考文章

1.https://zhuanlan.zhihu.com/p/27908027
2.https://blog.csdn.net/bitcarmanlee/article/details/54729807


推荐阅读
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 本文为Codeforces 1294A题目的解析,主要讨论了Collecting Coins整除+不整除问题。文章详细介绍了题目的背景和要求,并给出了解题思路和代码实现。同时提供了在线测评地址和相关参考链接。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
author-avatar
UIleader
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有