TensorFlow实战系列12--池化层网络结构
2018-02-06 14:52
274 查看
在卷积神经网络中,卷积层之间往往会加上一个池化层(poolinglayer)。池化层可以非常有效地缩小矩阵的尺寸,从而减少最后全连接层中的参数。使用池化层既可以加快计算速度也有防止过拟合问题的作用。和卷积层类似,池化层前向传播的过程也是通过移动一个类似过滤器的结构完成的。不过池化层过滤器中的计算不是节点的加权和,而是采用更加简单的最大值或者平均值运算。使用最大值操作的池化层被称之为最大池化层(max
pooling),这是被使用得最多的池化层结构。使用平均值操作的池化层被称之为平均池化层(average pooling)。
与卷积层的过滤器类似,池化层的过滤器也需要人工设定过滤器的尺寸、是否使用全 0 填充以及过滤器移动的步长等设置,而且这些设置的意义也是一样的。卷积层和池化层中过滤器移动的方式是相似的,唯一的区别在于卷积层使用的过滤器是横跨整个深度的,而池化层使用的过滤器只影响一个深度上的节点。所以池化层的过滤器除了在长和宽两个维度移动之外,它还需要在深度这个维度移动。下面的
TensorFlow 程序实现了最大池化层的前向传播算法。
# tf.nn. max_pool实现了最大池化层的前向传播过程,它的参数和tf.nn.conv2d函数类似。
# ksize提供了过滤器的尺寸,strides提供了步长信息,padding提供了是否使用全0填充。
pool = tf.nn.max_pool(actived_conv, ksize=[1, 3, 3, 1],
strides=[1, 2, 2, 1], padding='SAME') 对比池化层和卷积层前向传播在 TensorFlow 中的实现,可以发现函数的参数形式是相似的。在 tf.nn.max_pool 函数中,首先需要传入当前层的节点矩阵,这个矩阵是一个四维矩阵,格式和 tf.nn.conv2d 函数中的第一个参数一致。第二个参数为过滤器的尺寸。虽然给出的是一个长度为
4的一维数组,但是这个数组的第一个和最后一个数必须为 1。这意味着池化层的过滤器是不可以跨不同输入样例或者节点矩阵深度的。在实际应用中使用得最多的池化层过滤器尺寸为 [1,2,2,1] 或者 [1,3,3,1]。
tf.nn.max_pool 函数的第三个参数为步长,它和 tf.nn.conv2d 函数中步长的意义是一样的,而且第一维和最后一维也只能为 1。这意味着在TensorFlow 中,池化层不能减少节点矩阵的深度或者输入样例的个数。tf.nn.max_pool 函数的最后一个参数指定了是否使用全
0 填充。这个参数也只有两种取值——VALID 或者 SAME,其中 VALID 表示不使用全 0 填充,SAME 表示使用全 0 填充。TensorFlow 还提供了 tf.nn.avg_pool 来实现平均池化层。tf.nn.avg_pool 函数的调用格式和 tf.nn.max_pool 函数是一致的。
pooling),这是被使用得最多的池化层结构。使用平均值操作的池化层被称之为平均池化层(average pooling)。
与卷积层的过滤器类似,池化层的过滤器也需要人工设定过滤器的尺寸、是否使用全 0 填充以及过滤器移动的步长等设置,而且这些设置的意义也是一样的。卷积层和池化层中过滤器移动的方式是相似的,唯一的区别在于卷积层使用的过滤器是横跨整个深度的,而池化层使用的过滤器只影响一个深度上的节点。所以池化层的过滤器除了在长和宽两个维度移动之外,它还需要在深度这个维度移动。下面的
TensorFlow 程序实现了最大池化层的前向传播算法。
# tf.nn. max_pool实现了最大池化层的前向传播过程,它的参数和tf.nn.conv2d函数类似。
# ksize提供了过滤器的尺寸,strides提供了步长信息,padding提供了是否使用全0填充。
pool = tf.nn.max_pool(actived_conv, ksize=[1, 3, 3, 1],
strides=[1, 2, 2, 1], padding='SAME') 对比池化层和卷积层前向传播在 TensorFlow 中的实现,可以发现函数的参数形式是相似的。在 tf.nn.max_pool 函数中,首先需要传入当前层的节点矩阵,这个矩阵是一个四维矩阵,格式和 tf.nn.conv2d 函数中的第一个参数一致。第二个参数为过滤器的尺寸。虽然给出的是一个长度为
4的一维数组,但是这个数组的第一个和最后一个数必须为 1。这意味着池化层的过滤器是不可以跨不同输入样例或者节点矩阵深度的。在实际应用中使用得最多的池化层过滤器尺寸为 [1,2,2,1] 或者 [1,3,3,1]。
tf.nn.max_pool 函数的第三个参数为步长,它和 tf.nn.conv2d 函数中步长的意义是一样的,而且第一维和最后一维也只能为 1。这意味着在TensorFlow 中,池化层不能减少节点矩阵的深度或者输入样例的个数。tf.nn.max_pool 函数的最后一个参数指定了是否使用全
0 填充。这个参数也只有两种取值——VALID 或者 SAME,其中 VALID 表示不使用全 0 填充,SAME 表示使用全 0 填充。TensorFlow 还提供了 tf.nn.avg_pool 来实现平均池化层。tf.nn.avg_pool 函数的调用格式和 tf.nn.max_pool 函数是一致的。
相关文章推荐
- TensorFlow实战系列11--卷积层网络结构
- tensorflow 学习笔记12 循环神经网络RNN LSTM结构实现MNIST手写识别
- TensorFlow实战系列14--循环神经网络简介
- TensorFlow实战12:实现基于LSTM的语言模型
- Tensorflow实战学习(十二)【卷积网络简述】
- 学习TensorFlow,TensorBoard可视化网络结构和参数
- Caffe学习系列——工具篇:神经网络模型结构可视化
- Hyper-V 2016 系列教程12 Hyper-V 体系结构
- Caffe实战Day3-准备网络结构文件和训练文件(重点)
- 深度学习与TensorFlow实战(八)卷积神经网络基础
- 学习TensorFlow,保存学习到的网络结构参数并调用
- [置顶] 网络系列一 结合wireshark学习TCP/IP协议中帧,IP包,TCP包的包结构及字段意义
- 12.采用左右值编码来存储无限分级树形结构的数据库表设计[摘自网络]
- 【TensorFlow系列】【七】单图片多标签的分类网络搭建与训练
- 思考: R-CNN系列 网络结构 设计缺陷
- 【Spark亚太研究院系列丛书】Spark实战高手之路-第一章 构建Spark集群(第五步)(12)
- unity3D实际的原始视频游戏开发系列讲座12之U3D的2D为了开发实战的新方法
- Python爬虫入门实战系列(一)--爬取网络小说并存放至txt文件
- 学习TensorFlow,TensorBoard可视化网络结构和参数
- Android RxJava 实战系列:优雅实现 网络请求嵌套回调