1.图像是由像素构成的,每个像素又是由颜色构成的

假如我们处理一张 1000×1000 像素的图片,我们就需要处理3百万个参数! 1000×1000×3=3,000,000

卷积神经网络 — CNN 解决的第一个问题就是「将复杂问题简化」,把大量参数降维成少量参数,再做处理。

更重要的是:我们在大部分场景下,降维并不会影响结果。比如1000像素的图片缩小成200像素,并不影响肉眼认出来图片中是一只猫还是一只狗,机器也是如此。

2.保留图像特征

假如有圆形是1,没有圆形是0,那么圆形的位置不同就会产生完全不同的数据表达。但是从视 觉的角度来看,图像的内容(本质)并没有发生变化,只是位置发生了变化

当我们移动图像中的物体,用传统的方式的得出来的参数会差异很大!这是不符合图像处 理的要求的。

而 CNN 解决了这个问题,他用类似视觉的方式保留了图像的特征,当图像做翻转,旋转或者 变换位置时,它也能有效的识别出来是类似的图像

3.CNN 的基本原理

典型的卷积神经网络(CNN) 由3个部分构成: • 卷积层 • 池化层 • 全连接层

卷积层负责提取图像中的局部特征;池化层用来大幅降低参数量级(降维);全连接 层类似传统神经网络的部分,用来输出想要的结果。

卷积层的前向传播以及计 算方式:

(1)卷积层

  • 卷积层的运算过程如下图,用一个卷积核扫完整 张图片: 这个过程我们可以理解为我们使用一个过滤器 (卷积核)来过滤图像的各个小区域,从而得到 这些小区域的特征值

  • 在具体应用中,往往有多个卷积核,可以认为,每个 卷积核代表了一种图像模式,如果某个图像块与此卷 积核卷积出的值大,则认为此图像块十分接近于此卷 积核。如果我们设计了6个卷积核,可以理解为我们 认为这个图像上有6种底层纹理模式,也就是我们用 6种基础模式就能描绘出一副图像。 下图就是25种不同的卷积核的示例:

  • 卷积层计算公式

  • 输入张量格式:四个维度,依次为:样本数、图像高度、图像宽度、图像通道数
  • 输出张量格式:与输出矩阵的维度顺序和含义相同,但是后三个维度(图像高度、图 像宽度、图像通道数)的尺寸发生变化。
  • 卷积核格式:同样是四个维度,但维度的含义与上面两者都不同,为:卷积核高度、 卷积核宽度、输入通道数、输出通道数(卷积核个数)
  • 输入张量、卷积核、输出张量这三者之间的相互关系:

卷积核的输入通道数由输入张量的通道数所决定。

输出张量的通道数由卷积核的输出通道数所决定。

输出张量的高度和宽度这两个维度的尺寸由输入张量、卷积核、strides(每一步的步长)所共同决 定。计算公式如下:

                      注:以下计算演示均省略掉了偏置(Bias) ,严格来说其实每个卷积核都还有一个 Bias 参数。

tf自带的2D卷积层

• filters : 输出空间的维数(即卷积中输出滤波器的数量)。

• kernel_size : 过滤器的大小(一个整数或2个整数的元组/列表)。

• strides :横向和纵向的步长。

• padding :valid表示不够卷积核大小的块,则丢弃;     same表示不够卷积核大小的块就补 0,所以输出和输入形状相同。

• data_format :data_format:一个字符串,表示输入中维度的顺序.支持 channels_last(默认)和channels_first;

channels_last对应于具有形状(batch, height, width, channels)的输入,而

channels_first对应于具有形状(batch, channels, height, width)的输入。

•dilation_rate :表示使用扩张卷积时的扩张率, 注意:strides 不等于1 和 dilation_rate 不等于1 这两种情况不能同时存在。

• activation : 激活函数。

• use_bias :是否使用偏置。

• kernel_initializer :卷积核的初始化。

• bias_initializer :偏差向量的初始化。

•kernel_regularizer :卷积核的正则项。

• bias_regularizer :偏差向量的正则项。

• activity_regularizer :输出层的正则化函数。

• kernel_constraint :约束函数应用于卷积核。

• bias_constraint :将约束函数应用于偏差向量。

输入: 如果data_format =‘channels_first‘,则具有4D张量的形状:(batch_size, channels, rows, cols)

如果data_format =’channels_last‘,具有4D张量的形状: (batch_size, rows, cols, channels)

输出: 如果data_format =‘channels_first‘,则具有4D张量的形状:(batch_size, filters, new_rows, new_cols)

如果data_format =’channels_last‘,则具有形状的4D张量: (batch_size, new_rows, new_cols, filters) 。

其中rows和cols值可能由于填充而发生了变化。

动手实现卷积层Numpy版本

动手实现卷积层tf2.0版本

(2)池化层

池化层简单说就是下采样,他可以大大降低数据的维度。其过程如下:

上图中,我们可以看到,原始图片是20×20的,我们对其进行下采样,采样窗 口为10×10,

最终将其下采样成为一个2×2大小的特征图。

之所以这么做的原因,是因为即使做完了卷积,图像仍然很大(因为卷积核比 较小),

所以为了降低数据维度,就进行下采样。

总结:池化层相比卷积层可以更有效的降低数据维度,这么做不但可以大大减 少运算量,还可以有效的避免过拟合。

池化层计算公式

通过pool_size为每个窗口的张量计算最大值,从而实现对输入张量进行下采样,窗 口strides在每个维度上移动。使用“valid”填充选项时的结果输出的形状(行或列 数)为:

tf自带的MaxPool2D

• pool_size:2个整数的元组/列表:(pool_height,pool_width),用于指定池窗口的大小. 可以是单个整数,来指定所有空间维度的相同值.

• strides:2个整数的元组/列表,用于指定池操作的步幅.可以是单个整数,来指定所有空间维 度的相同值. 注意:当strides=None,大小和pool_size一样

• padding:一个字符串,表示填充方法,“valid”或“same”,不区分大小写.

• data_format:一个字符串,表示输入中维度的顺序.支持channels_last(默认)和 channels_first;channels_last对应于具有形状(batch, height, width, channels)的输 入,而channels_first对应于具有形状(batch, channels, height, width)的输入.

输入形状:如果data_format='channels_last':具有形状的4D张量(batch_size, rows, cols, channels)。

如果data_format='channels_first':具有形状的4D张量(batch_size, channels, rows, cols)。

输出形状:如果data_format='channels_last':具有形状的4D张量(batch_size, pooled_rows, pooled_cols, channels)。

如果data_format='channels_first':具有形状的4D张量(batch_size, channels, pooled_rows, pooled_cols)。

池化层numpy版本

池化层tf版本

(3)全连接层

经过卷积层和池化层处理过的数据输入到全连接层,得到最终想 要的结果。 经过卷积层和池化层降维过的数据,全连接层才能”跑得动”,不然数据量太大,计算成本 高,效率低下。

常用的CNN架构

卷积神经网络领域中有几种具有名称的架构。

最常见的是: LeNet:Yann LeCun在1990年代开发了卷积网络的第一个成功应用程序。其中,最著名的是 LeNet体系结构,该体系结构用于读取邮政编码,数字等。

AlexNet:由Alex Krizhevsky,Ilya Sutskever和Geoff Hinton开发的AlexNet是在计算 机视觉中普及卷积网络的第一部作品。AlexNet 于2012年参加了ImageNet ILSVRC挑战赛, 并大大超越了第二名(前5名的错误率为16%,而第二名的错误率为26%)。网络具有与 LeNet非常相似的体系结构,但是更深,更大,并且具有彼此堆叠的卷积层(以前通常只有一 个CONV层总是紧随其后是POOL层)。

ZF Net:2013年ILSVRC冠军是Matthew Zeiler和Rob Fergus的卷积网络。它被称为 ZFNet(Zeiler&Fergus Net的缩写)。通过调整体系结构超参数,特别是通过扩展中间 卷积层的大小并减小第一层的步幅和过滤器大小,对AlexNet进行了改进。 \

GoogLeNet:2014年ILSVRC获奖者是来自Google的Szegedy等人的卷积网络。它的主 要贡献是开发了一个Inception模块,该模块大大减少了网络中的参数数量(4M,而 AlexNet为60M)。此外,本文使用平均池而不是ConvNet顶部的全连接层,从而消除了 似乎无关紧要的大量参数。GoogLeNet也有多个后续版本,最近的是Inception-v4。

VGGNet:2014年ILSVRC的亚军是来自Karen Simonyan和Andrew Zisserman的网络, 该网络被称为VGGNet。它的主要贡献在于表明网络深度是获得良好性能的关键因素。他 们最终的最佳网络包含16个CONV / FC层,并且吸引人的是,它具有极其均匀的体系结构, 从头到尾仅执行3x3卷积和2x2池化。他们的预训练模型可用于Caffe中的即插即用功能。 VGGNet的缺点是评估成本更高,并且使用更多的内存和参数(140M)。这些参数中的 大多数都位于第一个完全连接的层中,并且由于发现这些FC层可以在不降低性能的情况下 被删除,从而大大减少了必要参数的数量。

ResNet:由Kaiming He等人开发的残差网络。是ILSVRC 2015的获胜者。它具有特殊 的跳过连接和大量使用批标准化的功能。该体系结构还缺少网络末端的完全连接的层。读 者还可以参考Kaiming的演示文稿(视频,幻灯片),以及一些最近的实验,这些实验在 Torch中再现了这些网络。ResNets目前是最先进的卷积神经网络模型,并且是在实践中 使用ConvNets的默认选择(截至2016年5月10日)。特别是,还可以看到更多的最新进 展,这些变化将原始架构从何开明等。深度残留网络中的身份映射(2016年3月发布)。

CNN 实际应用:

总结

CNN 的基本原理:

• 卷积层 — 主要作用是保留图片的特征

• 池化层 — 主要作用是把数据降维,可以有效的避免过拟合

• 全连接层 — 根据不同任务输出我们想要的结果

CNN 的价值:

• 能够将大数据量的图片有效的降维成小数据量(并不影响结果)

• 能够保留图片的特征,类似人类的视觉原理

卷积神经网络卷积,池化,全连接--笔记01相关推荐

  1. 【数据挖掘】卷积神经网络 ( 池化 | 丢弃 | 批量规范化 | 卷积神经网络完整流程示例 | 卷积 | 池化 | 全连接 | 输出 | 卷积神经网络总结 )

    文章目录 I . 池化 II . 丢弃操作 III . 批量规范化 IV . 卷积神经网络 完整流程示例 ( 1 ) : 原始输入图 V . 卷积神经网络 完整流程示例 ( 2 ) : 卷积层 C1C ...

  2. python实现卷积_【python实现卷积神经网络】池化层实现

    激活函数的实现(sigmoid.softmax.tanh.relu.leakyrelu.elu.selu.softplus):https://www.cnblogs.com/xiximayou/p/1 ...

  3. 【Pytorch神经网络理论篇】 13 深层卷积神经网络介绍+池化操作+深层卷积神经网络实战

    1 深层卷积神经网络概述 1.1 深层卷积神经网络模型结构图 1.1.1 深层卷积神经网络的正向结构构成剖析 输入层,将每个像素作为一个特征节点输入网络. 卷积层:由多个滤波器组合而成. 池化层:将卷 ...

  4. 深度学习与神经网络(七)——卷积神经网络之池化pooling 上采样upsample与降采样downsample(下采样)(subsample)(nn.MaxPool2d)

    池化层pooling与采样 upsample与downsample upsample(interpolating)是上采样,是图片的放大 unpool是上采样的一种 downsample(subsam ...

  5. 卷积神经网络只是一种全连接神经网络的特殊情况

    如图所示: 图片输入可以转换成一个一维向量,确定好卷积滤波器参数后,就可以确定整个参数矩阵(对应全连接层的w)哪些是0,哪些是需要计算的 第一行参数对应于与第一个输出相连的参数:第一次卷积 第二行参数 ...

  6. 【FPGA教程案例56】深度学习案例3——基于FPGA的CNN卷积神经网络之池化层verilog实现

    FPGA教程目录 MATLAB教程目录 -------------------------------------------------------------------------------- ...

  7. 卷积神经网络---卷积层、激励层、池化层以及全连接层

    文章目录 概述 卷积神经网络 局部连接+权值共享** 输入层 卷积层 激励层 池化层 全连接层 参考资料 概述 这两天在看论文,涉及到卷积神经网络的知识,之前一直对这块迷迷糊糊.看到了一篇博文写的很好 ...

  8. 【卷积神经网络】卷积层,池化层,全连接层

    转于:<入门PyTorch> 卷积层是卷积神经网络的核心, 大多数计算都是在卷积层中进行的. 1 卷积层 1.1 概述 首先介绍卷积神经网络的参数. 这些参数是由一些可学习的滤波器集合构成 ...

  9. 卷积层、池化层和全连接层

    卷积层(Convolution) 什么是卷积,如下图所示,卷积操作是用卷积核,按照一定的步长,在一张图片上规律性的移动.卷积核的每个单元有权重,在卷积核移动的过程中将图片上的像素和卷积核的对应权重相乘 ...

最新文章

  1. javaweb web.xml文件详解
  2. Linux Kernel TCP/IP Stack — L4 Layer
  3. Ubuntu学习小结(一) 基础知识,系统安装,软件安装,解压缩
  4. 10款 非常酷炫的网站首页焦点图 兼容ie浏览器
  5. 前端开发 元素的浮动 文字环饶效果 横向排列效果 0229
  6. Python 多版本共存问题
  7. 防伪拉线 CCD 纠偏控制器
  8. RabbitMQ基础知识详解
  9. 恋恋风辰 对于redis底层框架的理解(一)
  10. pdf reference官方指南之-语法基础和文件结构
  11. php 滑块 爬虫_php中强大爬虫工具querylist
  12. 基于MATLAB/Simulink的电力电子电路仿真技术——直流降压(Buck)变换器及Powergui的使用
  13. FPGA-小梅哥时序传输模型
  14. Geoserver发布OSM官网地图
  15. ListView分页(带图片)显示用法案例
  16. Oracle Parallel Query(OPQ)
  17. 小程序之修改单条数据
  18. 【KRKR进阶实用教程】1、捕获鼠标位置——存档界面制作
  19. PHP新版资阁网址导航源码+网站盲盒
  20. 2023年消费电子行业研究报告

热门文章

  1. 我们应该怎样做需求分析?(一)需求调研
  2. 变频泵 计算机控制技术,变频泵站节约能耗的计算机控制技术浅析
  3. java邮箱发送验证码_java 邮箱发送验证码
  4. 法国敏捷开发与敏捷测试模式
  5. 7-4 帅到没朋友(20 分)
  6. STFT短时傅里叶变换的实现
  7. python简单小游戏代码-python基础练习之几个简单的游戏
  8. python机器学习快速入门
  9. Java 学习总结 Week2
  10. MySQL数据库企业级开发技术