CNN中的池化层的理解和实例
池化操作是利用一个矩阵窗口在输入张量上进行扫描,并且每个窗口中的值通过取最大、取平均或其它的一些操作来减少元素个数。池化窗口由ksize来指定,根据strides的长度来决定移动步长。如果strides都是1,每个矩阵窗口都将被使用,如果strides的值都是2,那么每一维度上的窗口每隔1个被使用。
举例:
tf.nn.avg_pool(value, ksize, strides, padding, name=None)
功能:计算池化区域中元素的平均值
输入参数:
value:一个四维的Tensor,维度分别表示[batch, height, width, channels]
ksize:长度不小于4的整形数组,每一维度对应于输入数据张量中每一维的窗口对应值
strides:长度不小于4的整型数组,表示滑动窗口在输入数据张量每一维度上的步长
padding:字符串,取值为SAME或者VALID
输出:一个Tensor,输出维度和value相同
输出数据的维度计算方法:shape(output) = (shape(value) - ksize + 1) / strides
取舍方向取决于:padding的值
padding = 'SAME':向下取舍,输入和输出维度相同
padding = 'VALID':向上取舍,输入输出维度不同
1 input_data = tf.Variable(np.random.rand(10, 6, 6, 3), dtype= np.float32) 2 filter_data = tf.Variable(np.random.rand(2, 2, 3, 1), dtype= np.float32) 3 y = tf.nn.conv2d(input_data, filter_data, strides =[1,1,1,1], padding='SAME') 4 output = tf.nn.avg_pool(value=y, ksize=[1,2,2 ,1], strides=[1,2,2,1], padding='SAME') 5 with tf.Session() as sess: 6 init = tf.initialize_all_variables() 7 sess.run(init) 8 a = sess.run(y) 9 b = sess.run(output) 10 print (a) 11 print (b)
其中,a的维度:(10,6,6,1),b的维度:(10,3,3,1),b的维度计算方法:由于池化时ksize是2×2,原来张量为6×6,移动步长为2,
所以最后池化后的张量为(6-2+1)/2=2.5,此时公式不适用。我自己的算法:1+(6-2)/2 = 3
时刻记着自己要成为什么样的人!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)