2卷积神经网络相关API详解-2.2TensorFlow之池化操作API
2017-11-02 11:22
363 查看
参考:
http://www.cnblogs.com/hellcat/p/7020135.html
http://blog.csdn.net/mao_xiao_feng/article/details/53453926
http://blog.csdn.net/mao_xiao_feng/article/details/78004522
http://www.studyai.com/
池化层/汇聚层(Pooling Layer):
通常,在连续的卷积层之间会周期性地插入一个汇聚层。它的作用是逐渐降低数据体的空间尺寸,这样的话就能减少网络中参数的数量,使得计算资源耗费变少,也就能有效控制过拟合。汇聚层使用MAX操作,对输入数据体的每一个深度切片独立进行操作,改变它的空间尺寸。最常见的形式是汇聚层使用尺寸2x2的滤波器,以步长为2对每个深度切片进行降采样,将其中75%的激活信息都丢掉。每个MAX操作是从4个数字中取最大值(也就是在深度切片中某个2x2的区域)。深度保持不变。汇聚层的一些公式:
输入数据体尺寸W1⋅H1⋅D1
有两个超参数:
空间大小F
步长S
输出数据体尺寸W2⋅H2⋅D2 ,其中
W2=(W1−F)/S+1
H2=(H1−F)/S+1
D2=D1
因为对输入进行的是固定函数计算,所以咩有引入参数
在汇聚层中很少使用零填充
在实践中,最大汇聚层通常只有两种形式:一种是F=3,S=2,也叫重叠汇聚(overlapping pooling),另一个更常用的是F=2,S=2。对更大感受进行汇聚尺寸也更大,而且往往对网络有破坏性。
汇聚层
普通汇聚(General Pooling):
除了最大汇聚,汇聚单元还可以使用其他的函数,比如平均汇聚(average pooling)或者范式汇聚(L2-norm pooling)。平均汇聚历史上比较常用,但是现在很少使用了,因为实践证明,最大汇聚的效果比平均汇聚要好。
汇聚层在输入数据体的每个深度切片上,独立地对其进行空间上的降采样。
左边:本例中,输入数据体尺寸[224x224x64]被降采样到了[112x112x64],采用的滤波器尺寸是2,步长为2,而深度不变。
右边:最常用的降采样操作是取最大值,也就是最大汇聚,这里步长为2,每个取最大值操作是从4个数字中选取(即2x2的方块区域中)。
池化或汇聚(pooling)
1、tf.nn.avg_pool:平均池化
2、tf.nn.max_pool:最大池化
参数是四个,和卷积很类似:
第一个参数value:需要池化的输入,一般池化层接在卷积层后面,所以输入通常是feature map,依然是[batch, height, width, channels]这样的shape
第二个参数ksize:池化窗口的大小,取一个四维向量,一般是[1, height, width, 1],因为我们不想在batch和channels上做池化,所以这两个维度设为了1
第三个参数strides:和卷积类似,窗口在每一个维度上滑动的步长,一般也是[1, stride,stride, 1]
第四个参数padding:和卷积类似,可以取’VALID’ 或者’SAME’,大多数时候都是“VALID”
第五个参数data_format:张量的数据格式,可以是“NHWC” 或“NCHW”,一般就是默认,必须要和conv2d一致。
第六个参数name:给池化节点起一个名字
返回一个Tensor,类型不变,shape仍然是[batch, height, width, channels]这种形式
示例源码:
假设有这样一张图,双通道
第一个通道:
第二个通道:
用程序去做最大值池化:
这里步长为1,窗口大小2×2,输出结果:
池化后的图:
证明了程序的结果是正确的。
我们还可以改变步长
最后的result就变成:
http://www.cnblogs.com/hellcat/p/7020135.html
http://blog.csdn.net/mao_xiao_feng/article/details/53453926
http://blog.csdn.net/mao_xiao_feng/article/details/78004522
http://www.studyai.com/
池化层/汇聚层(Pooling Layer):
通常,在连续的卷积层之间会周期性地插入一个汇聚层。它的作用是逐渐降低数据体的空间尺寸,这样的话就能减少网络中参数的数量,使得计算资源耗费变少,也就能有效控制过拟合。汇聚层使用MAX操作,对输入数据体的每一个深度切片独立进行操作,改变它的空间尺寸。最常见的形式是汇聚层使用尺寸2x2的滤波器,以步长为2对每个深度切片进行降采样,将其中75%的激活信息都丢掉。每个MAX操作是从4个数字中取最大值(也就是在深度切片中某个2x2的区域)。深度保持不变。汇聚层的一些公式:
输入数据体尺寸W1⋅H1⋅D1
有两个超参数:
空间大小F
步长S
输出数据体尺寸W2⋅H2⋅D2 ,其中
W2=(W1−F)/S+1
H2=(H1−F)/S+1
D2=D1
因为对输入进行的是固定函数计算,所以咩有引入参数
在汇聚层中很少使用零填充
在实践中,最大汇聚层通常只有两种形式:一种是F=3,S=2,也叫重叠汇聚(overlapping pooling),另一个更常用的是F=2,S=2。对更大感受进行汇聚尺寸也更大,而且往往对网络有破坏性。
汇聚层
普通汇聚(General Pooling):
除了最大汇聚,汇聚单元还可以使用其他的函数,比如平均汇聚(average pooling)或者范式汇聚(L2-norm pooling)。平均汇聚历史上比较常用,但是现在很少使用了,因为实践证明,最大汇聚的效果比平均汇聚要好。
汇聚层在输入数据体的每个深度切片上,独立地对其进行空间上的降采样。
左边:本例中,输入数据体尺寸[224x224x64]被降采样到了[112x112x64],采用的滤波器尺寸是2,步长为2,而深度不变。
右边:最常用的降采样操作是取最大值,也就是最大汇聚,这里步长为2,每个取最大值操作是从4个数字中选取(即2x2的方块区域中)。
池化或汇聚(pooling)
1、tf.nn.avg_pool:平均池化
2、tf.nn.max_pool:最大池化
tf.nn.max_pool(value, ksize, strides, padding, data_format='NHWC', name=None)
参数是四个,和卷积很类似:
第一个参数value:需要池化的输入,一般池化层接在卷积层后面,所以输入通常是feature map,依然是[batch, height, width, channels]这样的shape
第二个参数ksize:池化窗口的大小,取一个四维向量,一般是[1, height, width, 1],因为我们不想在batch和channels上做池化,所以这两个维度设为了1
第三个参数strides:和卷积类似,窗口在每一个维度上滑动的步长,一般也是[1, stride,stride, 1]
第四个参数padding:和卷积类似,可以取’VALID’ 或者’SAME’,大多数时候都是“VALID”
第五个参数data_format:张量的数据格式,可以是“NHWC” 或“NCHW”,一般就是默认,必须要和conv2d一致。
第六个参数name:给池化节点起一个名字
返回一个Tensor,类型不变,shape仍然是[batch, height, width, channels]这种形式
示例源码:
假设有这样一张图,双通道
第一个通道:
第二个通道:
用程序去做最大值池化:
import tensorflow as tf a=tf.constant([ [[1.0,2.0,3.0,4.0], [5.0,6.0,7.0,8.0], [8.0,7.0,6.0,5.0], [4.0,3.0,2.0,1.0]], [[4.0,3.0,2.0,1.0], [8.0,7.0,6.0,5.0], [1.0,2.0,3.0,4.0], [5.0,6.0,7.0,8.0]] ]) a=tf.reshape(a,[1,4,4,2]) pooling=tf.nn.max_pool(a,[1,2,2,1],[1,1,1,1],padding='VALID') with tf.Session() as sess: print("image:") image=sess.run(a) print (image) print("reslut:") result=sess.run(pooling) print (result)
这里步长为1,窗口大小2×2,输出结果:
image: [[[[ 1. 2.] [ 3. 4.] [ 5. 6.] [ 7. 8.]] [[ 8. 7.] [ 6. 5.] [ 4. 3.] [ 2. 1.]] [[ 4. 3.] [ 2. 1.] [ 8. 7.] [ 6. 5.]] [[ 1. 2.] [ 3. 4.] [ 5. 6.] [ 7. 8.]]]] reslut: [[[[ 8. 7.] [ 6. 6.] [ 7. 8.]] [[ 8. 7.] [ 8. 7.] [ 8. 7.]] [[ 4. 4.] [ 8. 7.] [ 8. 8.]]]]
池化后的图:
证明了程序的结果是正确的。
我们还可以改变步长
pooling=tf.nn.max_pool(a,[1,2,2,1],[1,2,2,1],padding='VALID')
最后的result就变成:
reslut: [[[[ 8. 7.] [ 7. 8.]] [[ 4. 4.] [ 8. 8.]]]]
相关文章推荐
- 2卷积神经网络相关API详解-2.1TensorFlow之卷积操作API
- 2卷积神经网络相关API详解-2.3/2.4TensorFlow之激活函数API详解(上/下)
- c#中使用api(shfileoperation)进行文件操作,特别详解了回收站相关参数
- 『TensorFlow』网络操作API_上
- ElasticSearch的查询相关操作---使用es的api和结果遍历
- 基于字符的卷积神经网络实现文本分类(char-level CNN)-论文详解及tensorflow实现
- Python编程之string相关操作实例详解
- Linux-(C)利用Mysql相关API实现类似mysql的操作
- Hbase 基本API操作详解
- Elasticsearch 相关 api 操作
- u-boot串口和stdio、console初始化及相关操作详解<二>
- angularjs教程——Dom操作相关指令详解
- 注册表API相关操作演示
- 详解神经网络算法所需最基础数据结构Tensor及其相关操作
- PHP操作AD,adLDAP类API详解与实例
- u-boot串口和stdio、console初始化及相关操作详解<一>
- tensorflow 中反卷积操作(transpose conv)详解
- Deep Learning-TensorFlow (1) CNN卷积神经网络_MNIST手写数字识别代码实现详解
- C语言中改变目录的相关操作函数详解
- C语言中操作进程信号的相关函数使用详解