TensorFlow学习笔记之五(卷积神经网络)
文章目录
- 1. 图片识别问题简介以及经典数据集
- 1.1 图片识别问题简介
- 1.2 经典数据集
- 1. 单通道图片求卷积
- 1.1 基本的图片求卷积
- 1.2 填充的图片求卷积
- 1.3 TensorFlow计算卷积
- 2. 三通道图片求卷积
- 3. 池化层
- 4. 小结
- 4.1 输入图片为正方形,卷积核为正方形,单卷积核,单通道
- 4.2 输入图片为正方形,卷积核为正方形,单卷积核,三通道
- 4.3 输入图片为正方形,卷积核为正方形,多卷积核,多通道
- 5.
1. 图片识别问题简介以及经典数据集
1.1 图片识别问题简介
视觉是人类认识世界非常重要的一种知觉。对于人来说,通过视觉来识别手写体数字、识别图片中的物体或者找出图片中人脸的轮廓都是非常简单的任务。但是这对于计算机来说不是一件简单的事情。
图片识别问题希望借助计算机中的程序来处理、分析和理解图片中的内容,使得计算机可以从图片中识别各种不同模式的目标和对象。比如前面的MNIST联系就是通过计算机来识别图片中的手写体数字。
1.2 经典数据集
MNIST数据集:TensorFlow入门数据集
CIFAR :CIFAR数据集是一个影响力很大的图像分类数据集。分为CIFAR-10和CIFAR-100两个问题,它们都是图像字典项目(Visual Dictionary)中800万张图片中的一个子集。CIFAR数据集中的图片是32*32的彩色图片。
ImageNet:
无论是MNIST还是CIFAR数据集,相比真实环境有两个最大的问题:
- 现实生活中的图片分辨率要远高于32*32,而且图像的分辨率也不会是固定的。
- 现实生活中的物体类别很多,无论是10中还是100种都远远不够,而且一张图片中不会只出现一个种类的物体。
为了更加贴近真实环境下的图像识别问题,由斯坦福大学的李飞飞教授带头整理的ImageNet很大程度地解决了这两个问题。
ImageNet是一个基于WordNet的大型图像数据库。
目标:抽取一个32323的图片的特征,再将提取的特征喂入到全连接网络。
- 卷积可以认为是一种有效提取图像特征的方法。
- 一般会用一个正方形的卷积核,遍历图片上的每个像素点。图片内的每个像素点,乘以卷积核上相对应的点的权重,求和,在加上偏置。
1. 单通道图片求卷积
1.1 基本的图片求卷积
现在对于一个551的图片,用一个331的卷积核求卷积。
如图所示,计算机会将一张551图片转换为一个55的矩阵,矩阵中的每个值代表其像素点的灰度。现在用一个33的矩阵对其求卷积。
每次求卷积的过程为拿着卷积核在原始图片举证上求卷积。如图中所示,就是
1∗(−1)+0∗0+2∗1+5∗1+4∗0+2∗1+3∗(−1)+4∗0+5∗1+1=11*(-1)+0*0+2*1+5*1+4*0+2*1+3*(-1)+4*0+5*1+1=1 1∗(−1)+0∗0+2∗1+5∗1+4∗0+2∗1+3∗(−1)+4∗0+5∗1+1=1
其总体大概过程如图
图片来源于
可以看我们是拿卷积核在原始图片上“滑动”求卷积。
在这里,影响输出矩阵的规格的因素有,原始图片大小,卷积核大小,滑动的步长。
一张图片经过一次卷积操作输出的边长 = ( 输入图片的边长 - 卷积核 + 1 ) /步长(向上取整)
比如上图中,输出边长 = ( 5 - 3 +1 ) / 1 = 3
1.2 填充的图片求卷积
有时候,需要在图片的周围进行填充(有全零填充和其他填充),如下图所示:
那么输出的边长就等于 = 输入长度 / 步长 = 5 / 1 = 5(向上取整)
在TensorFlow中,用参数padding = ‘SAME’(填充) 或者 padding = ‘VALID’(未填充) 表示
总的来说,卷积是讲一个矩阵进行信息提取(特征抽取)的作用。参数为卷积核参数3 * 3 = 9个
1.3 TensorFlow计算卷积
tf.nn.conv2d(
输入描述: 一次喂入图片数, 图片分辨率(两位),通道数
输出描述: 卷积核分辨率(两位), 通道数,核的个数
核滑动步长,第一个和第四个固定为1。第二三个分别为行步长和列步长。
pading = ‘VALID’
)
# eg
tf.nn.conv2d([batch, 5, 5, 1],[3, 3, 1, 16],[1, 1, 1, 1],padding = 'VALID'
)
2. 三通道图片求卷积
在一般情况下,我们遇到的图片都是彩色图片。在计算机中,他们都是三通道图片(三基色原理,RGB红绿蓝)。
所以我们的图片矩阵变成了5 * 5 * 3。此时我们的卷积核变成了3 * 3 * 3 。
# eg
tf.nn.conv2d([batch, 5, 5, 3],[3, 3, 3, 16],[1, 1, 1, 1],padding = 'SAME'
)
3. 池化层
池化的作用:
- 减少特征的数量
- 最大值池化可以提取图片纹理,均值池化可保留背景特征
4. 小结
从计算的角度来看:卷积操作就是矩阵操作。
4.1 输入图片为正方形,卷积核为正方形,单卷积核,单通道
不填充
输出的矩阵边长=输入边长−卷积核边长+1步长输出的矩阵边长 =\frac{输入边长 - 卷积核边长 + 1}{步长} 输出的矩阵边长=步长输入边长−卷积核边长+1
填充
输出的矩阵边长=输入边长步长输出的矩阵边长 =\frac{输入边长 }{步长} 输出的矩阵边长=步长输入边长
在这里有个疑惑,比如卷积核边长为三,填充一层,也就是输入边长+2。输出边长满足上述两个公式。
假如卷积核边长为5。那么是填充一层还是两层?
4.2 输入图片为正方形,卷积核为正方形,单卷积核,三通道
边长与单通道类似
输出通道数可以为1,每个对应的通道数相乘后相加。
可以为3,每个对应的通道数相乘后,相互独立。
也可以为9,输入的每个通道数与卷积核的通道数相乘,再相加。
4.3 输入图片为正方形,卷积核为正方形,多卷积核,多通道
边长与单通道类似
输出通道数
= 卷积核个数,每个对应的通道数相乘后相加。
= 卷积核个数3, 每个对应的通道数相乘后,相互独立。
= 卷积核个数9,输入的每个通道数与卷积核的通道数相乘,再相加。
5.
TensorFlow学习笔记之五(卷积神经网络)相关推荐
- tensorflow学习笔记七----------卷积神经网络
卷积神经网络比神经网络稍微复杂一些,因为其多了一个卷积层(convolutional layer)和池化层(pooling layer). 使用mnist数据集,n个数据,每个数据的像素为28*28* ...
- 深度学习笔记:卷积神经网络的可视化--卷积核本征模式
目录 1. 前言 2. 代码实验 2.1 加载模型 2.2 构造返回中间层激活输出的模型 2.3 目标函数 2.4 通过随机梯度上升最大化损失 2.5 生成滤波器模式可视化图像 2.6 将多维数组变换 ...
- 霹雳吧啦wz学习笔记1_卷积神经网络
霹雳吧啦wz学习笔记1_卷积神经网络 全连接层: 全连接层就是由许许多多的神经元共同连接而得来的 卷积层: 卷积就是一个滑动窗口在我们的特征图上进行滑动并计算 卷积的目的:进行图像特征提取 卷积核的c ...
- 深度学习入门之PyTorch学习笔记:卷积神经网络
深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 3 多层全连接网络 4 卷积神经网络 4.1 主要任务及起源 4.2 卷积神经网络的原理和结构 4.2.1 卷积层 1. ...
- [TensorFlow 学习笔记-04]卷积函数之tf.nn.conv2d
[版权说明] TensorFlow 学习笔记参考: 李嘉璇 著 TensorFlow技术解析与实战 黄文坚 唐源 著 TensorFlow实战郑泽宇 顾思宇 著 TensorFlow实战Google ...
- 深度学习笔记:卷积神经网络的Tensorflow实现
文章出处:深度学习笔记11:利用numpy搭建一个卷积神经网络 免费视频课程:Hellobi Live | 从数据分析师到机器学习(深度学习)工程师的进阶之路 在上一讲中,我们学习了如何利用 nump ...
- 吴恩达深度学习笔记- lesson4 卷积神经网络
文章目录 Week 1 卷积神经网络基础 4.1.1 计算机视觉(Computer vision) 4.1.2 边缘检测示例(Edge detection example) 4.1.3 更多边缘检测内 ...
- 【TensorFlow实战笔记】卷积神经网络CNN实战-cifar10数据集(tensorboard可视化)
IDE:pycharm Python: Python3.6 OS: win10 tf : CPU版本 代码可在github中下载,欢迎star,谢谢 CNN-CIFAR-10 一.CIFAR10数据集 ...
- 深度学习笔记:卷积神经网络的可视化--特征图
目录 1. 前言 2. 模型的训练 3. 特征图可视化 3.1 加载保存的模型¶ 3.2 图像预处理:将图像转换为张量 3.3 例化一个模型用于返回各层激活输出(即feature map) 3.5 各 ...
- 学习笔记 | 深度卷积神经网络在计算机视觉中的应用
图像识别是一种利用计算机对图像进行处理.分析和理解,以识别各种不同模式的目标和对象的技术,是计算机视觉领域的一个主要研究方向,在以图像为主体的智能化数据采集与处理中具有十分重要 的作用和影响.目前图像 ...
最新文章
- pytorch之expand,gather,squeeze,sum,contiguous,softmax,max,argmax
- python slice是共享内存吗_在共享内存中使用numpy数组进行多处理
- Oracle Study之--Oracle 11gR2通过RMAN克隆数据库
- 使用 file_get_contents 获取网站信息报错failed to open stream: HTTP request failed!
- ThinkPHP5最新URL访问:PATH_INFO和兼容模式
- c获取当前程序的路径_漏洞挖掘|使用AFL Fuzzing网络程序
- 有关send()和recv()函数的理解
- 发那科程序全部输出_走,去看看发那科机器人全新的自动化解决方案!
- STM32F072RB 实作笔记(一)- Keil 安装
- 小程序简介和开发工具
- matplotlib绘图并导出eps矢量图和svg矢量图
- python处理FITS文件 2:astropy.io.fits介绍及打开FITS文件
- 驾考: 车内如何看左轮和右轮的位置 LTS
- dev.env.js和prod.env.js
- 超详细的fiddler教程,从小白到精通(六)❤️
- 关于MFC程序中隐藏任务栏图标的问题
- 练习2-4:重新编写函数squeeze(s1,s2),将字符串s1中的任何字符与字符串时s2中的字符匹配的字符都删除
- 计算机中的物理知识点总结,有关初中物理电磁波章节知识点总结
- SKY65162-70LF射频功率放大器
- Matlab音频变速不变调、变调不变速(Phase Vocoder)
热门文章
- python矩阵行秩函数_为什么矩阵行秩等于列秩?
- equals变量在前面和后面的区别,equals已知(存在实际值)的变量在前的好处
- matlab 轴旋转图像,求助,二维图像如何绕轴旋转成为三维图像
- 软件工程导论 银行储蓄系统_独家:重庆农商行客户存款被盗刷 银行却责怪客户用卡不规范...
- 宋体字体是什么_Win10 系统替换 macOS 苹方字体 - 瞬间提升文字清晰
- 两个多元正态分布的KL散度、巴氏距离和W距离
- 直播 | 彩云科技CEO袁行远:NLP与冒险游戏研究一览
- java实验3 2020.4.6
- centos7下使用yum安装pip
- nn.LayerNorm的参数