聊聊卷积神经网络CNN
卷积神经网络(Convolutional Neural Network,CNN)是一种被广泛应用于图像识别、语音识别和自然语言处理等领域的深度学习模型。与RNN、Transformer模型组成AI的三大基石。
在卷积神经网络中,相比较普通的神经网络,增加了卷积层(Convolution)和池化层(Pooling)。其结构一般将会是如下:

CNN的层连接顺序是"Convolution - ReLU - (Pooling)"(Pooling层有时候可以省略)。
图中的Affine层,也被称为全连接层(Dense层)或仿射层,作用是将输入数据(input)与权重矩阵(W)相乘,然后添加偏置(B),从而进行线性变换。这个线性变换是神经网络中的一个基本操作,用来实现特征映射和模型参数的学习。在几何学领域,Affine层进行的矩阵乘积运算被称为“仿射变换”。仿射变换包括一次线性变换和一次平移,分别对应神经网络的加权和运算与加偏置运算。
卷积层
传统的全连接神经网络(Full-Connected)中忽略了数据的形状,比如,输入数据是图像时,图像通常是高、长、通道三个方向上的3维形状。但是向全连接层(FC)输入时,需要将3维数据拉平为1维数据。全连接层会忽视形状,将全部的输入数据作为相同的神经元(同一纬度的神经元)处理,所以无法利用与形状相关的信息。
卷积层可以保持形状不变。当输入数据是图像时,卷积层会以3维数据的形式接受输入数据,并以3维数据的形式输出至下一层。因此,CNN架构的网络可以正确理解图像等具有形状的数据。
卷积层进行的处理就是卷积运算。卷积运算相当于图像处理中的"滤波器运算"。而这个"滤波器"也就是卷积层的卷积核。正是通过它在输入数据上的滑动来提取特征。其运算过程如下所示:

将各个位置上滤波器的元素与输入的对应元素相乘,然后再求和。最后将结果保存到输出的对应位置。将这个过程在所有的位置运算一遍,就可以得到卷积运算的输出。
注意,这里的计算是把输入的行 乘 卷积核的行; 然后再依次累加,得到最终值。
卷积操作可以分为以下几个步骤:
将卷积核与输入数据的一个小区域进行逐元素相乘。
将相乘得到的结果求和,得到卷积操作的输出值。
将卷积核在输入数据上滑动一个固定的步长,重复上述操作,直到覆盖整个输入数据。
通过卷积操作,卷积核可以提取输入数据中的局部特征。这是因为卷积核的每个权重都对应着输入数据中的一个局部区域,通过逐元素相乘和求和的操作,卷积核可以将这个局部区域的特征信息进行提取。
卷积核具有以下几个重要的特点:
特征提取:卷积核通过滑动窗口的方式在输入数据上进行卷积操作,从而提取输入数据中的局部特征。这些特征可以用于后续的分类、检测和识别等任务。
参数共享:卷积核的权重是共享的,即在卷积操作中使用的同一个卷积核对输入数据的不同区域进行卷积操作时,使用的是相同的权重。这种参数共享的方式大大减少了模型的参数量,提高了模型的训练效率。
空间不变性:卷积操作具有平移不变性,即对于输入数据中的特征在空间上的平移,卷积操作的输出结果不会发生变化。这种空间不变性使得卷积神经网络能够更好地处理图像等具有平移不变性的数据。
填充
在卷积层处理之前,支持对输入数据做填充,即在输入数据的周围填入固定的数据(比如0,1等)。而输入数据的形状改变就会影响到输出数据的大小,这也是使用填充的作用,通过填充输入数据的周围数据,保持输出数据的大小,因此将数据传入到下一层时就不会出现丢失或数据不全。

向输入数据的周围填入0,图中用虚线表示填充,并省略了填充内容"0".
步幅
应用卷积核的位置间隔即为步幅。默认一般都是1,也可以调整为2或是其它的。步幅可以减少输出的高、宽。
输出数据的计算
有个公式可以算出经过卷积核运算后的输出数据高与宽, 假设输入大小为(H,W),卷积核大小为(FH,FW),输出大小为(OH,OW),填充为P,步幅为S:

三维卷积
图像是3维数据,除了高、长方向还有通道方向。增加了通道,会按通道进行输入数据与滤波器的卷积运算。

需要注意的是,三维卷积的运算中,输入数据和卷积核的通道数要设置为相同的值。
三维数据的书写格式为(channel, height, width),卷积核的书写格式也是如此,其运算可简化如下:

输出是1个通道的特征,如果需要多通道,可以叠加起来,其表现形式如下:

应该应用N个卷积核,输出特征数也生成了N个。
多维的数据在不同的框架(pytorch、TensorFlow)中其表现形式也是不一样的,一般都是按照张量的阶度来标识数据维度。CNN的四维数据,其格式可以表示为(batch_num,channel, height, width)
其它
在某些CNN框架中,会应用小卷积核运算,比如11卷积,33卷积;还有一种分组卷积;一个卷积层中多尺寸的卷积核等等。这些算是卷积神经网络中的深入知识点,也可以了解下。
池化层
池化是缩小高、长方向上的空间的运算;对输入的特征图进行降采样,减少特征图的维度,同时保留重要的特征信息。
池化层的计算有两种: 最大池化(Max Pooling)和平均池化(Average Pooling)。最大池化选择窗口内的最大值作为输出,而平均池化则计算窗口内值的平均值。这两种方式都能有效地减少特征图的尺寸,进而降低计算复杂度。
如下,按步幅为2,进行2*2窗口的Max池化,在上一层的输出数据上应用窗口,滑动,每次取窗口内的最大值。

这篇博文写得不错,可以更深入的了解池化层:
聊聊卷积神经网络CNN的更多相关文章
- 卷积神经网络(CNN)前向传播算法
在卷积神经网络(CNN)模型结构中,我们对CNN的模型结构做了总结,这里我们就在CNN的模型基础上,看看CNN的前向传播算法是什么样子的.重点会和传统的DNN比较讨论. 1. 回顾CNN的结构 在上一 ...
- 卷积神经网络(CNN)反向传播算法
在卷积神经网络(CNN)前向传播算法中,我们对CNN的前向传播算法做了总结,基于CNN前向传播算法的基础,我们下面就对CNN的反向传播算法做一个总结.在阅读本文前,建议先研究DNN的反向传播算法:深度 ...
- 卷积神经网络CNN总结
从神经网络到卷积神经网络(CNN)我们知道神经网络的结构是这样的: 那卷积神经网络跟它是什么关系呢?其实卷积神经网络依旧是层级网络,只是层的功能和形式做了变化,可以说是传统神经网络的一个改进.比如下图 ...
- 【深度学习系列】手写数字识别卷积神经--卷积神经网络CNN原理详解(一)
上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...
- 深度学习之卷积神经网络(CNN)详解与代码实现(二)
用Tensorflow实现卷积神经网络(CNN) 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10737065. ...
- 深度学习之卷积神经网络(CNN)详解与代码实现(一)
卷积神经网络(CNN)详解与代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10430073.html 目 ...
- 【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理
上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...
- 卷积神经网络(CNN)学习笔记1:基础入门
卷积神经网络(CNN)学习笔记1:基础入门 Posted on 2016-03-01 | In Machine Learning | 9 Comments | 14935 Vie ...
- 深度学习方法(五):卷积神经网络CNN经典模型整理Lenet,Alexnet,Googlenet,VGG,Deep Residual Learning
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 关于卷积神经网络CNN,网络和文献中 ...
- 深度学习之卷积神经网络CNN
转自:https://blog.csdn.net/cxmscb/article/details/71023576 一.CNN的引入 在人工的全连接神经网络中,每相邻两层之间的每个神经元之间都是有边相连 ...
随机推荐
- 26种source-map看花了眼?别急,理解这几个全弄懂
上一篇 webpack处理模块化源码 的文章中提到了 "source map",这一篇来详细说说. 有什么作用 source map 用于映射编译后的代码与源码,这样如果编译后的代 ...
- CentOS7挂载NTFS格式的硬盘
前言 一些NTFS格式的移动硬盘或U盘插在服务器上可能不会自动挂载,本文为手动挂载的步骤. 步骤 安装相关程序: yum install -y ntfs-3g 使用一些命令查看需要挂载的分区 # 查看 ...
- 终于搞懂了python2和python3的encode(编码)与decode(解码)
终于搞懂了python2的编码 在python2下碰到非常多次的中文乱码,这次来梳理一下编码问题. 在python 2中默认编码是 ASCII,而在python 3中默认编码是 unicode. un ...
- [ABC141E] Who Says a Pun?
2023-02-17 题目 题目传送门 翻译 翻译 难度&重要性(1~10):4 题目来源 AtCoder 题目算法 dp,字符串 解题思路 看到求两个完全相同的子串时,我们可以发现其与求最长 ...
- Kafka入门学习
什么是 Kafka Kafka 是由 Linkedin 公司开发的,它是一个分布式的,支持多分区.多副本,基于 Zookeeper 的分布式消息流平台,它同时也是一款开源的基于发布订阅模式的消息引擎系 ...
- 快手商品详情API接口如何使用
使用快手开的API接口获取商品详情,可按照以下步骤进行: 1.注册账号并创建应用 注册开发者账号,并在账号后台中创建一个应用,获得AppKey和AppSecret等信息.这些信息是使用API接口访问快 ...
- 每日一库:pprof简介
pprof简介 pprof是Go语言的一个性能分析库,它可以帮助开发者找出程序中的性能瓶颈.pprof提供了CPU分析.内存分析.阻塞分析等多种性能分析功能. 以下是pprof的主要特性: CPU分析 ...
- git clone时报错:Permission denied
一.问题简述: 执行git clone git@github.com:T-Better/Soft_test.git时报错:\302\226git@github.com: Permission deni ...
- Vue3中的几个坑,你都见过吗?
Vue3 目前已经趋于稳定,不少代码库都已经开始使用它,很多项目未来也必然要迁移至Vue3.本文记录我在使用Vue3时遇到的一些问题,希望能为其他开发者提供帮助. 1. 使用reactive封装基础数 ...
- 音频格式轻松转 - foobar2000
一.foobar2000简介 foobar2000 是一款免费的专业级别音频解码播放器,支持的诸多音频格式,可加载附加组件扩展更多支持. 除了解码以外,可轻松实现对音频格式的转换,支持几乎所有主流格式 ...