1. max_pool和avg_pool接口参数
avg_pool(value, ksize, strides, padding, data_format=“NHWC”, name=None)
max_pool(value, ksize, strides, padding, data_format=“NHWC”, name=None)
1)value:当前神经网络层的节点矩阵。
2)ksize:过滤器的尺寸大小。
3)strides:移动的步长。
4)padding:添加补充方式。和卷积层类似,有两种方式,值分别为:‘SAME’和‘VALID’;SAME是Right和Bottom式填充为相邻值。
2. 示例
import os
import tensorflow as tf
import numpy as np
# 忽略不想提示警告错误的信息
# 1是提示,2是警告,3是错误
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
M = np.array([
[[1],[-1],[0]],
[[-1],[2],[1]],
[[0],[2],[-2]]
])
M = np.asarray(M, dtype='float32')
M = M.reshape(1, 3, 3, 1)
pool_avg = tf.nn.avg_pool(M, ksize=[1,2,2,1], strides=[1,2,2,1], padding='SAME')
pool_max = tf.nn.max_pool(M, ksize=[1,2,2,1], strides=[1,2,2,1], padding='SAME')
with tf.Session() as sess:
# 初始化
tf.global_variables_initializer().run()
# 输出池化层的值
print("最大池化:\n",sess.run(pool_max))
print("均值池化:\n",sess.run(pool_avg))
结果:
3. 数学解析
神经网络节点输入层矩阵
填充相同值:
对于步长为[1,2,2,1];需要对四块小矩阵进行均值或者最大值运算,得到池化结果。
四小块矩阵如下:
对这四块小矩阵的元素,计算均值或者最大值。得到:
1)均值
2)最大值