前言:至于物体被识别成什么,是取决于你提取到了什么特征

1、人类视觉系统

。。。

2、卷积神经网络数学基础(CNN数学原理)

黑白图像的话就只有一个灰色通道。现在还有就是RGBa就是多了一个alpha通道。图像的不变性是指比如图中右边的这个猫他是出现在图像的中央位置,那我也能识别出他是一个猫;如果猫头出现在图像的右上角还是会识别出这样一个猫头;如果猫头出现在图像的左上角还是会识别出这样一个猫头;

输出层9个神经元是指9种不同的形状。

比如说他是一个16到9这样一个全连接神经网络。首先第一种情况:判断左上角有没有这个拐角;先把这个4x4的图像先给他展平,展成一个输入层,这里相当于把这16个像素点都进行了一个这样的全连接。

实际上我们感兴趣的是0145,即左上角的部分他有没有拐角,即判断出来a这是不是有没有拐点。实际上就是:

第二种情况:判断1256这个上边是不是有拐角。此时他所感兴趣的就是1256这4个点。此时就是

同样依次类推

最后就是16到9的一个全连接神经网络。(这个全连接神经网络呢其实这些虚线的连线,他其实并没有用这些点,这些连线你实际上把这些权重设置为0就可以了 )

我们最终想要的是右边这9个结果。

我们进一步把整个的给他写出来,这个就是的连接权重矩阵;就是展平之后就是的这样一个向量;b是这样一个的向量;最后得出来就是z,z就是我们最后要有的9个结果。

(注意此处的0和1代表的是起作用,并不是实际的值)根据权重是否起作用可以看出整个w是非常稀疏的,并且1100整个出现的模式是非常有规律的,所以说我们可以把整个这样的全连接神经网络给他缩减成为只有1四个位置对应的w。

表示拐角特征;表示斜线特征;

那如果我们把整个的最后一个16到9的一个结果,但是这个9呢把它写成一个的这样一个图像的形式,那么整个的abcdefghi就代表了左边的这个图像当中有没有拐角的这样的出现(就是图中有没有拐点);只要这个abcdefghi他的这9个点当中的某一个点他是激活了,那就代表我左边的图中是有这个拐点形式的特征的。

那我们再检测有没有这种斜线的特征,那就把刚刚的这样一种呢再换成另外一个,他也是一个稀疏的,实际上里边起作用的还是那对应的11起作用;

再检测图中有没有横线呢?其实他检测有没有某一种模式,最终所起决定性作用的就是这4条连接线,从图中可以看出这4条连接线就是2条相邻的,隔着2条再相邻。最终可以看出实际上是将的参数组,换成了我只需要4个参数就能表示了。检测每种模式都需要4个参数,检测出这三种模式一共需要12个参数。

如果我们把最后的9种结果也看成的图像,那么就是的图像最后得到的是的图像结果。

------------------------------卷积神经网络的卷积操作---------------

比如说看左边的图,这一步部分是我的原始图像,是我的输入图像,中间这个图呢就是我卷积操作的卷积核(也就是相当于我们上一张图像中的4个连线,这也就是卷积核,卷积核是能够重用的)这里呢他是一个的卷积核,之前那4条线是一个的卷积核。这里的卷积核其实在左边整个原始图像上会对应一部分的的区域,计算操作部分实际上对相同位置上的像素点的值进行相乘最后再进行加和,得出来的就是这个点的结果(对应原始图像中的一个中心像素的位置);

之后我可以把整个的卷积核向右移动一个位置,移动一个像素点,我整个的卷积核还是不动的,那得到的就是这个点后边的那个点的位置结果。之后一直移动,把整个图像走到最右边。

右边移动完之后,再把整个卷积核向下移动一个位置,再移到最右边,然后再向下移动一个位置也就是一行。

一直遍历完整个原始图像,最后得出来就是右边图中红框内的结果。

如下例子对左边图像使用一个的卷积核,这个地方是进行一个边缘检测的一个算子,这是在图像当中使用的一个算子,这个算子也是一个卷积核;是将卷积核中的数值给固定住了,是为了便于查看怎么计算的。其实事实上我们想要进行求解的就是卷积核当中的这样一个数值,实际上这样一个的卷积核就是我们要求解的这样一个的权重矩阵,

实际上在某一次卷积操作当中,他只感受到一个局部的特征,那我再进行下一次移动的时候他就会又感受到另一个局部,实际上是每一次感受一个不同的局部。在进行一次卷积操作的时候其他部分的区域是暂时的不管的。

左边是一个的图像,卷积核是,最后卷出来是一个大小。

我们原始图像经过一个卷积层,得出来的一个结果实际上和原始图像他的像素是没有多大区别的,比如说一个的图像,经过一个的卷积,他实际上卷出来的应该是一个大小的结果,实际上和原始图像他的分辨率没有多大区别的,那如果我们经过卷积之后,再使用一个全连接神经网络去进行检测的时候,他实际上是整个展平之后全连接神经网络它的神经元还是比较多的,那如果你一直这样的卷下去,可能要卷很多层,至少要卷128次,因为每一次,是减少2。

就是不用进行每一次的叠加卷积,当然卷积核还可以是或者是的,但是这样也是要卷好多次,怎么样能够减少有效的卷积次数呢?这里就是有一种池化操作。

--------------------池化操作(就是将整个图像的分辨率进行降低)

由原来的降为,分辨率是直接降为原来的

Trainable Pooling是把他当做是一个映射函数,那我学习他的函数的参数。

经过卷积核以及pooling之后,就可以定义卷积神经网络的一般结构。

卷积层主要是为了参数的重复利用,还可以进行这种局部性的特征提取。

经过最后的Pooling层最后已经是一个分辨率非常低的feature map,那就可以把它展平,之后就可以再跟一些全连接层,最后做一些输出层,做分类和回归都是可以的。

之前的例子,虽然图片都是RGB的深度为3的3通道图片但是为了方便计算,把它看做深度depath为1。
filter的深度也要和你原始图像的深度是一样的,第一个3是一个depth表示的是深度,后边的表示的是他的卷积核的一个长和宽。第二个filter2也是,因为他有两个卷积核filter1和filter2,所以他卷出来的结果是有2种,就是两个feature map,

如果看成一个全连接神经网络他应该是一个的权重矩阵。现在使用的是卷积核的这种操作,一共进行了4次操作,所以可以看到图中一共有16条连线,正好每一种颜色的连接线他是重复了4次,所以说他实际上还是只有4个权重连接。看左边这9个他实际上有连接线,第一个他是有1条连接线,第二个他是有2条连接线,第三个他是有1条,第四个有2条,第五个有4条连接线,后边的就是对称的,第六个有2条连接线,第七个有1条,第八个有2条,第九个有1条。

再把其放到原始的的图像上,这就代表了我原始的的图像上,对应位置的像素值参与了几次运算。比如最中间的点参与了4次运算。(此部分的内容对后边进行梯度反向传播的时候是有用的,因为误差进行反向传播的时候,他实际上是跟你原始的这个地方(比如原始输入图像)进行了几次运算是有关的,比如有的地方进行了4次运算,有的地方进行了1次运算,他所进行的误差传播是不一样的)

3、卷积神经网络推导及其发展历史(CNN推导)

卷积神经网络的BP算法(Back Propagation)--------------------卷积神经网络的误差反向传播(Error Back Propagation)--------------------推导过程

卷积神经网络实际上是分为卷积层(conv)和Pooling层,分别把卷积层和Pooling层分别进行推导。

3.1前向传播过程

绿色输入是一个,此处通道为1,它对应的黄色filter的深度也是1,那么输出的红色feture map就也是一个。(特征图就是我经过一次卷积操作获得的结果)(bias=0代表的是一个偏置项)

卷积操作实际上还是的一个形式,和之前的全连接神经网络计算的数学形式是一样的,只不过这里的是一个卷积操作,不是之前的类似于全连接神经网络的矩阵相乘,

缺少的如图所示:

为了使卷积之后的feature map的大小和原始输入图像的大小一样,所以在进行卷积前需要在原始图像外圈补一圈像素,在左边和右边同时补的宽度就是Padding的大小,即对应图中就是这样宽度的一圈。这样的话最后算出来的就等于原始的就等于原始的

mn还是表示里边的卷积,d表示深度。

在本例中我通过Pooling之后再进行卷积实际上她所对应的原来的局部感受野他就扩大为原来的两倍了。

深蓝学院的深度学习理论与实践课程:第三章相关推荐

  1. 深蓝学院的深度学习理论与实践课程:第二章

    1.知识引入(重点介绍极大似然估计) 极大似然估计就是我们来求解模型参数的这样一个过程或者是一种方法.   已经知道模型的概率分布那就是p,这就符合前边我们假设的第2点,这个分布是已知的.O代表是我们 ...

  2. 深蓝学院的深度学习理论与实践课程:第一章

    预备知识: 概念1:数学期望理解 在概率论和统计学中,数学期望(mean)(或均值,亦简称期望)是试验中每次可能结果的概率乘以其结果的总和,是最基本的数学特征之一.它反映随机变量平均取值的大小. 需要 ...

  3. 深蓝学院的深度学习理论与实践课程:第五章

    1.Pytorch简介和安装 Pytorch可以在线安装也可以离线安装. 下载完成之后安装命令是:(install 后边是你下载完成后放置的路径) conda install /a/b/xxx.tar ...

  4. 深蓝学院的深度学习理论与实践课程:第四章

    1.模型与风险 在模型评价时会有理想情况和现实情况(现实情况分为两种) 在学习过程中最重要的是损失函数: 还有其他损失函数. 损失函数是用来量化模型预测和真实标签之间的差异.比如说我们模型预测出来是, ...

  5. 深度学习理论与实践——课程笔记(一)

    目录 课程前言 什么是人工智能? 什么是机器学习? 什么是深度学习? 什么是计算机视觉? 什么是自然语言处理? PyTorch框架与TensorFlow框架的选取 预备知识 软硬件基础 推荐书籍 自学 ...

  6. 【总结】新手必看!超过60个小时+600页文档的免费AI深度学习理论与实践课程...

    自从2012年AlexNet大放光彩以来,深度学习已经走过了快10年了,给学术界和工业界都带来了翻天覆地的变化.世界各国争先恐后,不断推出人工智能相关的政策,力争在新一轮技术革命中继续引领世界! 巨头 ...

  7. 深蓝学院《从零开始手写VIO》作业三

    深蓝学院<从零开始手写VIO>作业三 深蓝学院<从零开始手写VIO>作业三 1. 代码修改 2. 公式推导 3. 公式证明: 深蓝学院<从零开始手写VIO>作业三 ...

  8. javascript进阶课程--第三章--匿名函数和闭包

    javascript进阶课程--第三章--匿名函数和闭包 一.总结 二.学习要点 掌握匿名函数和闭包的应用 三.匿名函数和闭包 匿名函数 没有函数名字的函数 单独的匿名函数是无法运行和调用的 可以把匿 ...

  9. Mysql系列课程--第三章 建表 插数据

    数据库模型图 /班级表/ CREATE TABLE `class` (`c_no` int(11) NOT NULL AUTO_INCREMENT,`c_name` varchar(45) NOT N ...

最新文章

  1. 第2周个人作业:WordCount
  2. PyCharm中批量查找及替换
  3. Expression Blend 定义RadioButton行为动画
  4. 序列化的高阶认识-简单认识一下 Java 原生序列化
  5. DPDK 跟踪库tracepoint源码实例分析
  6. git 刷新远程分支列表_掌握Git命令一张脑图就行
  7. linux里面的perl脚本怎么调用函数,如何在我的Perl脚本中包含另一个文件的函数?...
  8. Redis3集群搭建
  9. 在jquery的ajax方法中的success中使用return要注意的问题
  10. EasyRecovery解救打工人的崩溃
  11. VMware虚拟机下载及安装教程
  12. mongodb意外断电,非正常关闭, 造成不可启动, 日志出现WT_ERROR: non-specific WiredTiger error, terminating
  13. Python循环读取文件夹内视频
  14. linux多拨脚本,openwrt-mwan3负载均衡,多线多拨
  15. pve开启嵌套虚拟化,pve下kvm类型CPU的群晖VMM虚拟机创建
  16. Java SDK的作用
  17. 串级PID控制原理-1
  18. JAVA 项目打包和部署一站式解决方案
  19. 使用树莓派构建嵌入式C++调试环境
  20. synplify pro和lattice lse综合同一段verilog代码时的区别

热门文章

  1. Navicat添加新数据、保存当前修改
  2. 零起点学算法11——求梯形面积
  3. mysql navicat导入bcp_SQL Server中BCP导入导出用法详解
  4. python 常见的元字符(\d,\w ,^ ,$ 等) 的使用
  5. Kotlin 函数的问题
  6. Kotlin 数组的使用
  7. 完美解决Error:Execution failed for task ':APP:transformClassesWithDexForDebug'...问题
  8. 火狐浏览器中添加httprequest的方法
  9. .net2.0网站多语言
  10. Node搭建多人聊天室