聊聊卷积神经网络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的引入 在人工的全连接神经网络中,每相邻两层之间的每个神经元之间都是有边相连 ...
随机推荐
- [selenium]点击元素出现的obscure问题
前言 我们一般使用如下方式点击元素: elem = driver.find_element(...) elem.click() # 或者使用带等待条件的方式 elem = WebDriverWait( ...
- C# 使用openxml解析PPTX中的文本内容
前言 本文讨论的仅针对微软Office 2007以后的(OOXML定义)PowerPoint文档,Office 2007以前的用二进制格式定义的(ppt格式)文档不在本文讨论范围. 一.依赖类库 本文 ...
- ModuleNotFoundError: No module named 'requests' 解决办法
问题记录:运行python程序时,出现报错:ModuleNotFoundError: No module named 'requests' 问题原因:没有安装requests库 解决办法:安装requ ...
- WPF 入门笔记 - 07 - MVVM示例
滴咚,大家好久不见.好就没写东西了,鸽着鸽着就无了... 回到正题,上篇文章说完命令提了一嘴MVVM模式直接就上MVVMLight这些程序的框架了,虽然也没说多少,但还是有点不好过渡,这篇对MVVM做 ...
- React Router 6 快速上手
1.概述 React Router 以三个不同的包发布到 npm 上,它们分别为: react-router: 路由的核心库,提供了很多的:组件.钩子. react-router-dom: 包含rea ...
- python独立脚本应用Django项目的环境
一.需求说明 一直用 Django 在开发一个网站项目,其中的注册用户和登录,都是使用Django自带的认证系统.主要是对密码的加密,在注册或者登录的时候,前端传递多来的密码,我会使用Django的s ...
- 关于三维模型OSGB格式轻量化在数据存储的重要性浅析
关于三维模型OSGB格式轻量化在数据存储的重要性浅析 三维模型的OSGB格式是一种常见的数据格式,用于存储和传输地理信息系统(GIS)中的三维地图数据.随着技术的不断发展,三维模型的应用越来越广泛,包 ...
- ETL之apache hop系列2-hop web安装和入门
前言 在Docker安装apache hop 首先确保Docker已经安装和运行Java 11 JDK 安装文档参考:https://blog.csdn.net/Chia_Hung_Yeh/artic ...
- 别再用 offset 和 limit 分页了,性能太差!
不需要担心数据库性能优化问题的日子已经一去不复返了. 随着时代的进步,随着野心勃勃的企业想要变成下一个 Facebook,随着为机器学习预测收集尽可能多数据的想法的出现. 作为开发人员,我们要不断地打 ...
- QA|conftest使用了fixture但是没生效的原因|Pytest
conftest.py中使用了fixture但是没生效,后面发现是因为autouse默认False导致,修改后代码如下 # conftest.py @pytest.fixture(scope='ses ...