ubuntu之路——day17.1 卷积操作的意义、边缘检测的示例、filter与padding的关系、卷积步长
感谢吴恩达老师的公开课,以下图片均来自于吴恩达老师的公开课课件
为什么要进行卷积操作?
我们通过前几天的实验已经做了64*64大小的猫图片的识别。
在普通的神经网络上我们在输入层上输入的数据X的维数为(64*64*3, m) 假设第二层的节点数为1000,在全连接网络下,则W的维数为(1000, 64*64*3)。
这看起来是可以操作的,但是实际情况下的图片是更高清的,比如现在的手机已经动辄2400万像素。
在这种情况下让内存来处理很多W权重矩阵是不现实的,因此卷积神经网络就成为了计算机视觉领域的利器。
边缘检测的卷积示例
现在我们希望从上面的图片中提取纵向边缘特征,
现在我们有一个6x6的黑白图片矩阵,因为彩色图片是RGB三通道的,此时只有一个通道
我们使用了一个3x3的过滤器filter(有些文献中也称其为核kernel),用这个filter中的每个元素去和对应位置的原矩阵相乘相加,就得到了卷积后的4x4矩阵
比如最终结果第一行第一列的0 = 10x1+10x1+10x1+10x0+10x0+10x0-1x10-1x10-1x10
第一行第二列的30 = 10x1+10x1+10x1+10x0+10x0+10x0-0x10-0x10-0x10
从最终的卷积结果来看,左右两列均为0亮度最低,中间两列亮度高,所以纵向的边缘就被检测出来了。
可能从上述例子中感觉检测出的纵轴很宽,但是这只是6x6图片的卷积,如果换成维度很高像素很高的图片,就会显得很窄。
filter:
在过去,人们常常使用一些手写的过滤器来检测图像的垂直或平行边缘,比如以下的滤波器:
但是现在我们往往将滤波器中的九个参数设置为神经网络中可学习的W1~W9参数,来让神经网络自己找到更加复杂的边缘检测方式。具体的做法会在下一次博文中谈到。
Padding:
在上述的普通卷积操作中:
如果我们把原始图片看做n x n的,设置一个f x f的filter,我们会得到一个经过卷积后的(n - f + 1) x (n - f + 1)的图像,所以可以看到图像经过卷积后会变小
所以普通的卷积操作有两个缺点:
1.缩小输出shrinking output
2.丢失边缘信息 因为卷积操作的边缘只会被覆盖一次,而中间的区域会被多次卷积输出,所以边缘的信息可能会被丢掉
为了解决上述问题,我们可以在卷积操作前pad填充图像
举个例子:原始图像是6x6的,我们在周围填充一圈像素点,就变成了8x8的,然后经过3x3的卷积,得到了一个6x6的图像,和原图像的维度相同。
将填充padding的层数设为p,则经过填充后的结果就是(n + 2p - f + 1) x (n + 2p - f + 1)
Valid convolution and Same convolution:
valid:no padding
Same:Pad so that output size is the same as the input size
对于same卷积而言:n + 2p - f + 1 == n
所以得到:p = (f - 1) / 2,选用相应于filter的填充层数p就可以完成same卷积
注意:遵循计算机视觉的惯例一般的f为奇数,如3x3,5x5,7x7等,有时也会有1x1的过滤器
卷积步长stride:
所谓卷积步长就是一次将filter移动的步长,在上面的例子中,我们6x6图像的卷积中将3x3的filter每次移动1个步长,所以得到了4x4的卷积结果。
如果将步长设置为2,我们就会得到2x2的卷积结果,因为向下取整舍弃了没有卷积的部分,综合而言有以下公式:
python中:向下取整为floor,向上取整为ceil,四舍五入为round
镜像翻转:
在信号学和数学领域,通常对我们上面的操作称之为cross-correlation互相关。
对filter进行顺时针旋转180°,再进行镜像的操作后才称之为卷积。这是为了满足(A*B)*C = A*(B*C)
但是在深度学习领域中,镜像翻转的操作其实并不重要,所以在一些深度学习的文献中将第一种操作直接称之为convolution卷积。
如上图,实际上分为两步:
1.顺时针旋转180°
2.镜像翻转得到右图
ubuntu之路——day17.1 卷积操作的意义、边缘检测的示例、filter与padding的关系、卷积步长的更多相关文章
- ubuntu之路——day17.4 卷积神经网络示例
以上是一个识别手写数字的示例 在这个示例中使用了两个卷积-池化层,三个全连接层和最后的softmax输出层 一般而言,CNN的构成就是由数个卷积层紧跟池化层再加上数个全连接层和输出层来构建网络. 在上 ...
- ubuntu之路——day17.2 RGB图像的卷积、多个filter的输出、单个卷积层的标记方法
和单层图像的卷积类似,只需要对每一个filter构成的三层立方体上的每一个数字与原图像对应位置的数字相乘相加求和即可. 在这个时候可以分别设置filter的R.G.B三层,可以同时检测纵向或横向边缘, ...
- ubuntu之路——day17.3 简单的CNN和CNN的常用结构池化层
来看上图的简单CNN: 从39x39x3的原始图像 不填充且步长为1的情况下经过3x3的10个filter卷积后 得到了 37x37x10的数据 不填充且步长为2的情况下经过5x5的20个filter ...
- ubuntu之路——day17.1 用np.pad做padding
网上对np.pad的解释很玄乎,举的例子也不够直观,看了更晕了,对于CNN的填充请参考下面就够用了: np.pad的参数依次是目标数组,多增加的维数可以理解为一张图的前后左右增加几圈,设置为'cons ...
- 对抗生成网络-图像卷积-mnist数据生成(代码) 1.tf.layers.conv2d(卷积操作) 2.tf.layers.conv2d_transpose(反卷积操作) 3.tf.layers.batch_normalize(归一化操作) 4.tf.maximum(用于lrelu) 5.tf.train_variable(训练中所有参数) 6.np.random.uniform(生成正态数据
1. tf.layers.conv2d(input, filter, kernel_size, stride, padding) # 进行卷积操作 参数说明:input输入数据, filter特征图的 ...
- Python之路,Day17 - 分分钟做个BBS论坛
Python之路,Day17 - 分分钟做个BBS论坛 本节内容: 项目:开发一个简单的BBS论坛 需求: 整体参考"抽屉新热榜" + "虎嗅网" 实现不同 ...
- [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Inception模型和Residual模型卷积操作的keras实现
Inception模型和Residual残差模型是卷积神经网络中对卷积升级的两个操作. 一. Inception模型(by google) 这个模型的trick是将大卷积核变成小卷积核,将多个卷积核 ...
- python——对图像进行卷积操作,使用多个滤波器
线性滤波可以说是图像处理最基本的方法,它可以允许我们对图像进行处理,产生很多不同的效果.做法很简单.首先,我们有一个二维的滤波器矩阵(有个高大上的名字叫卷积核)和一个要处理的二维图像.然后,对于图像的 ...
随机推荐
- SQL server 2008数据库的备份与还原(亲测,效果良好)注意采用单用户模式呀
.SQL数据库的备份: 1.依次打开 开始菜单 → 程序 → Microsoft SQL Server 2008 → SQL Server Management Studio → 数据库:Dsidea ...
- JAVA基础之设置随机成语验证码
package com.oracle; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import ja ...
- 如何统一管理单个任务下所有API的同步情况?
如何统一管理单个任务下所有API的同步情况 1. 一分钟完成单个API配置 单个API的配置包含:API名称.URL地址.请求方式.参数设置.自定义高级设置. 参数允许用户填写:Text.WebSer ...
- shell EOF 用户自定义终止符
#!/bin/bash ftp -n << EOF user guest 123456 binary cd /home/ prompt mget * close bye EOF 使用Tab ...
- Hive架构分析
一.Hive三种设计模式 1.默认配置[使用Netty存储元数据] 2.mysql[使用mysql存储元数据] 3.配置Thrift[使用mysql存储元数据] 二.执行步骤 三.scala访问Hiv ...
- Jenkins使用过程中注意事项
jenkins自动部署注意事项: 安装jenkins https://blog.csdn.net/qq_37372007/article/details/81586751 1.当提示错误ERROR: ...
- bat文件中运行python脚本方法
在脚本中使用start命令: @echo off start python xxx.py 注: start命令:启动单独的“命令提示符”窗口来运行指定程序或命令.如果在没有参数的情况下使用,start ...
- Unity进阶之:MVC编程思想
版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...
- 第9期《python3接口自动化测试》课程,6月29号开学!
2019年 第9期<python3接口自动化测试>课程,6月29号开学! 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学 本期上课时间:6月29号-7月28号,每周六.周日晚上20:3 ...
- django-全文解锁和搜索引擎
安装和配置 全文检索安装 pip install django-haystack==2.5.1 # 2.7.0只支持django1.11以上版本 搜索引擎安装 pip install whoosh 安 ...