1.边缘检测示例

*表示卷积操作,标准表示。使用3*3的过滤器对其进行卷积,将3*3的覆盖在左侧上,并将运算结果相加;第二步将窗口向右移动一个单位,进行计算...横向之后再将窗格下移一个,进行循环..

那么为什么能检测出呢?

对于左边的6*6的图像,要检测出中间的垂直部分。进行卷积运算之后,得到右边的结果,可以检测出其中的结果。

但是较粗,原因是6*6是比较小的。如果是1000*1000的话,效果会更好。

更多边缘检测

同样可以进行水平检测 ,只不过卷积矩阵右旋90度。

Sobel滤波器,优点在于中间一行元素的权重,即中间的权重,可以使结果的鲁棒性更高;还有sharr滤波器。

也可以将权重设置为参数,通过BP去进行学习,也可以检测到不止水平或垂直角度,比如45°、70°等。

2.Padding

从上图的卷积中,6*6与3*3,结果是4*4,所以一般的结果是:(n-f+1)*(n-f+1),n是原矩阵大小,f是卷积矩阵;

但是这样每次做卷积,图像就会被压缩,可能会缩到只有1*1的大小;另一个缺点是,对于位于边缘的特征,包括的次数很少,位于中间的,次数多,意味着丢掉了图像边缘的很多信息。

解决办法是,在进行卷积操作之前,可以进行pad,上图中p=padding=1,上下分被补上1,p也可以等于2...等等。

有两种卷积,valid中意味着不填充,Same意味着填充并且输出不变,其中p=(f-1)/2,所以f通常是奇数,是CV的惯例。

3.卷积步长

如果有框内元素到了外面,就不进行卷积,这是CV传统。所以要向下取整。

这是总结,包括图像原大小n,卷积f,padding的p,步幅s,最终输出的公式,有向下取整。

4.卷积为何有效?

对于有RGB三种的图像来说,进行卷积操作后,会得到4*4的结果,且其中的图像层数和卷积层数必须一致。

对于矩阵第一层R如果设置为检测垂直,另两个为0,则是针对红色层进行垂直边缘检测;如果关心在哪个颜色通道进行检测,则设置成下边的即可。

总结:nc在两个中相等的,最终结果中的nc'是使用的过滤器的个数,在本例中就是两个,上边的进行垂直边缘检测,下边的进行水平边缘检测。

最终将两个4×4的矩阵堆叠起来,得到最终的结果,4*4*2.

5.单层卷积网络

1.本例中由6*6*3,输出为4*4*2,因为滤波层是用了2个滤波器,即选择两个特征映射,如果是10个滤波器,那么最终结果为4*4*10。

2.卷积过程为相乘+偏置,使用ReLu进行非线性映射,最终得到a[1]输出就是4*4*2的结果。a[0]是输入,w[1]是第一层卷积层。

如果有10个3*3*3的滤波,那么这层神经网络有几个参数?

每一个滤波有 27个+偏置,偏置是实数,广播到矩阵中相加,共有280个。这个网络可以运用到大图上,而不增加参数个数,这是CNN的避免过拟合办法。

下面总结一下CNN的标记:

对于输入:包括图片高度宽度和通道数(RGB、灰度等),n[l]c是过滤器的通道数(是针对一个过滤器来说的),通道数肯定是要和上一层的输出通道数保持一致的。

//但是我感觉这里each filter is:f[l]*f[l]*n[l-1]c其实是不对的吧?

对于输入和输出,其中的高度和宽度是有计算关系的,另有激活、权重、偏置等。

对于A[l]的m是共有m个样本。

//感觉做CV确实是运算量大,矩阵都比较高维,不得不用GPU的。。。

6.简单卷积NN示例

现在假设来检测一张图中是否有一只猫,高度宽度=39,通道数=3;设置了每层卷积的参数,最终得到了7*7*40的结果,是为图片提取的特征数=1960,;

进行展开,最终使用logistic或softmax进行预测是否有猫。

在CNN中,设定这么多参数是比较麻烦的,高度和宽度会随着网络深度加深而逐渐减小,而通道数量在增加3->10->20->40,

在卷积网络中的三种层:卷积、池化、全连接层。后两者更容易设计。

7.池化层

使用池化层,来缩减模型大小,提高计算速度,提高所取特征的鲁棒性。

上例中使用池化层,若最终输出是2*2,那么很简单,对应颜色区域取最值即可。

池化的最大操作功能是主要在任何一个象限内提取到某个特征,它都会保留在最大池化的输出里,如果在过滤器中提取到某个特征,那么保留其最大值;如果没有提取到这个特征,那么即使最大值也是很小的。(例如在图片中检测猫眼),这是最大池化的直观理解。

更有趣的是,池化有一组超参,但是却不需要学习!一旦确定了f和s,它就是一个固定运算。

上例中,池化层为3*3,即f=3;之前在CNN中的参数仍然适用于当前;如果输入有nc个信道,那么对每个信道都单独进行最大池化操作,输出结果是3*3*nc。

上图是另一种平均池化,不太常用。每个取得是平均值。

一种用法是在很深的神经网络中,使用平均池化来分解规模为7*7*1000的网络的表示层,  

池化的参数包括:过滤器大小和步幅s,f=2,s=2应用最广泛,相当于高度宽度缩减一半。

最大池化中很少用到padding。

输入是nH*nW*nc,输出信道和输入一样,因为对每一个信道都进行池化。

没有要学习的参数!可能是手动设置,或者通过交叉验证设置,最大池化是计算NN某一层的静态属性

8.卷积神经网络示例

通常将一层lay=一层卷积+一层池化,作为一层,通常统计具有权重和参数的层(池化层没有权重和参数,只有一些超参数)。

假设要识别的图象是32*32*3,具有RGB的。

将特征展开为400维的向量,并且有一个全连接层,下一层为120;再连接一个全连接层,假设为84个单元,最后连接一个softmax层,10个单元。

那么如何选取这么多参数呢?对于超参数,不要自己选定,而要看其他文献中是如何取的。选一个在别人任务中很好的框架,那也可能适用于自己的程序。

随着网络深度的增加,宽度和高度都会减小,而信道通道数会增加。

典型的CNN是一个或多个con层之后跟一个池化层,然后是几个全连接层,最后一个softmax。

CNN的参数,输入层和池化层参数都为0,激活size是激活层相乘;可以发现大多数的参数是在全连接层(Fully connected),卷积层的参数较少的。

9.为什么使用卷积

和全连接网络相比,卷积拥有两个优点:参数共享和稀疏连接

对于这样地一个网络,如果是全连接,输入特征是3072个,第二层为4704个,那么需要的参数量是1400万;但是看卷积层的参数数量是共156个参数。

比如对于垂直检测,如果适用于图片中的一部分,那么图片中旁边的区域也可以进行垂直检测,可以在图片不同区域中使用同样的参数进行提取特征;

稀疏连接:最终右边的0行0列的0只与输入的36个特征中的9个相连接,神经网络可以通过这种机制减少参数,以便使用更小的训练集来训练它。

CNN具有平移不变性,一只猫向右移动两个像素,仍是清晰的一只猫,因为即使移动图片也依然具有非常相似的特征。

DLNg-CNN第一周的更多相关文章

  1. 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第一周测验【中英】

    [吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第一周测验[中英] 第一周测验 - 深度学习简介 和“AI是新电力”相类似的说法是什么? [  ]AI为我们的家庭和办公室的个人设备供电 ...

  2. 第一周 总结笔记 / 斯坦福-Machine Learning-Andrew Ng

    课程主页:https://www.coursera.org/learn/machine-learning/home/welcome 收集再多的资料也没用,关键是要自己理解总结,做笔记就是一个归纳总结的 ...

  3. Surprise团队第一周项目总结

    Surprise团队第一周项目总结 团队项目 基本内容 五子棋(Gobang)的开发与应用 利用Android Studio设计一款五子棋游戏,并丰富其内涵 预期目标 实现人人模式:2个用户可以在同一 ...

  4. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  5. 20145206邹京儒《Java程序设计》第一周学习总结

    20145206 <Java程序设计>第1周学习总结 教材学习内容总结 1.三大平台:Java SE.Java EE与Java ME.Java SE是各应用平台的基础,分为四个主要的部分: ...

  6. 20145304 刘钦令 Java程序设计第一周学习总结

    20145304<Java程序设计>第1周学习总结 教材学习内容总结 1995年5月23日,是公认的Java的诞生日,Java正式由Oak改名为Java. Java的三大平台是:Java ...

  7. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  8. 20145337《JAVA程序设计》第一周学习总结

    # 20145337 <Java程序设计>第1周学习总结 ## 教材学习内容总结 第一章 -Java最早是Sun公司撰写Star7应用程序的程序语言 -根据应用领域不同,有Java SE. ...

  9. Linux内核设计第一周 ——从汇编语言出发理解计算机工作原理

    Linux内核设计第一周 ——从汇编语言出发理解计算机工作原理 作者:宋宸宁(20135315) 一.实验过程 图1 编写songchenning5315.c文件 图2 将c文件汇编成32位机器语言 ...

  10. 20135328信息安全系统设计基础第一周学习总结(Linux应用)

    学习计时:共xxx小时 读书: 代码: 作业: 博客: 一.学习目标 1. 能够独立安装Linux操作系统   2. 能够熟练使用Linux系统的基本命令   3. 熟练使用Linux中用户管理命令/ ...

随机推荐

  1. The app references non-public selector in MyApp : id

      id<FBGraphUser>friend id<FBGraphUserExtraFields>user 应该使用 [user objectForKey:@"id ...

  2. qt tableWidget 表格控件使用

    //创建表格头 (灰色冻结状态的) QStringList header; header<<"Time"<<" ID "<< ...

  3. day_11py学习

    ''' 字典增加和删除 1.添加 xxx[新的key] = value 2.删除 del xxx[key] 3.修改 xxx[已存在的key] = new_value 4.查询 xxx.get(key ...

  4. [c#基础]使用抽象工厂实现三层 和反射

    引言 昨天加了一天班,今天闲来无事,就在想如何将之前的三层和最近一直在学的设计模式给联系在一起,然后就动手弄了个下面的小demo. 项目结构 项目各个层实现 Wolfy.Model层中有一个抽象类Ba ...

  5. ELK之使用metricbeat收集系统数据及其他程序并生成可视化图表

    将 Metricbeat 部署到您所有的 Linux.Windows 和 Mac 主机,并将它连接到 Elasticsearch 就大功告成啦:您可以获取系统级的 CPU 使用率.内存.文件系统.磁盘 ...

  6. ThinkPad X1 Carbon 2018 Windows 10无法关机的问题

    最近两天在工作中很多同事都遇到了自己的X1电脑关机时自动重启的现象,这个问题让我在知乎.微软支持.国外各种科技论坛找到了很多类似的症状. 但是针对同事们遇到的问题,解决方案异常的简单:就是下载联想驱动 ...

  7. centos 7 部署 MQTT

    官方教程  :头痛的是nginx 和 mqtt布局有所冲突,后台不能使用需要调整,当然是用 nginx自家的布局没问题,但是要收费 官方地址 1.由于emqttd是用Erlang语言编写的,所以,在L ...

  8. hadoop历史版本,包括大名鼎鼎的hadoop 0.20.2

    http://archive.apache.org/dist/hadoop/core/ 大名鼎鼎的hadoop 0.20.2在此: http://archive.apache.org/dist/had ...

  9. tensorflow模型在实际上线进行预测的时候,使用CPU工作

    最近已经训练好了一版基于DeepLearning的文本分类模型,TextCNN原理.在实际的预测中,如果默认模型会优先选择GPU那么每一次实例调用,都会加载GPU信息,这会造成很大的性能降低. 那么, ...

  10. wpf数据绑定:xml数据绑定

    wpf中可以通过XmlDataProvider,来实现xml数据的绑定.它通过XmlDataProvider来绑定外部资源,需要命名一个 x:Key 值,以便数据绑定目标可对其进行引用,Source设 ...