tf.nn.max_pool 从数学的角度看这个,超好理解。
在网上看了半天没看明白咋回事,于是自己决定研究一下,不搞花里胡哨,让大家之间理解他到底要干啥!!!!!
import tensorflow.compat.v1 as tf
tf.compat.v1.disable_eager_execution()
x=tf.constant([[1.,10.,3.,4.,],[5.,6.,7.,8.],[9.,10.,11.,12.],[13.,14.,15.,16]])
x=tf.reshape(x,[2,2,4,1])
SAME=tf.nn.max_pool(x,[1,1,2,1],[1,2,2,1],padding='SAME')#value, ksize, strides, padding Kize表示窗口大小 strides表示步长
a=tf.nn.max_pool(x,[1,2,1,1],[1,2,2,1],padding='SAME')#
with tf.Session() as sess:
a0=sess.run(x)
a1=sess.run(SAME)
a2=sess.run(a)
print(a0)
print(a1)
print(a2)
我先把矩阵变成[2,2,4,1]形式,简单粗暴的说就是整体分为两大块,然后两大块有分成两小块,两小块里分成4*1的矩阵,大家要注意中括号就能看明白我说的。
然后开始正题!!!!!
窗口[1,1,2,1],步长[1,2,2,1]分别为我定义的窗口大小和步长;
大家跟我一起先看然后看窗口第一个数 1,意思就是我会从第一大块开始,然后看步长第一个数字 1,说明我是一步一步走的,这两大块我都会遍历一遍,(意思就是这两大块我都会拿出几个数);
然后在看窗口第二个数 1,就是我们接下来会从两小块的第一块开始,在看步长第二个数 2 ,意思我是一次走两步,意思我只能分别在两小块里的第一块取数因为他总共就俩;
然后在看窗口第三个数 2 ,意思我从那小块的第二个数开始,在看步长第三个也是 2 所以就是 10 4 10 12
这个大家可以自行验证[1,2,1,1],[1,2,2,1]