介绍
平均池化操作
常用别名
- tf.keras.layers.AvgPool2D
计算公式
- S是strides(滑动步长)
- 原图片大小为 i (一般预处理成正方形)
- 池化窗口大小为 k(一般高宽相同)
- P是padding大小
计算结果大小:( i - k + 2 * P ) / S + 1
语法
__init__(
pool_size=(2, 2),
strides=None,
padding='valid',
data_format=None,
**kwargs
)
参数
- pool_size:指定池化窗口的大小。可以是一个整数或者tuple
- 一个整数:宽高都是该整数
- tuple:(pool_height,pool_width)
- strides:池化窗口的步长。可以是一个整数或者tuple,如果为None,其值就是pool_size
- 一个整数:宽高都是该整数
- tuple:(pool_height,pool_width)
- padding:字符串,
"valid"or"same"之一- “valid”:不是不填充
- “same”:填充,让计算公式不受
pool_size影响
- data_format:字符串,channels_last(默认)或channels_first中的一个,输入中维度的排序,
- channels_last:表示输入数据形状(batch,height, width, channels)
- channels_first:表示输入数据形状(batch, channels, height,width)的输入。
Input shape:
If data_format=’channels_last’: 4D tensor with shape (batch_size, rows, cols, channels).
If data_format=’channels_first’: 4D tensor with shape (batch_size, channels, rows, cols).
Output shape:
If data_format=’channels_last’: 4D tensor with shape (batch_size, pooled_rows, pooled_cols, channels).
If data_format=’channels_first’: 4D tensor with shape (batch_size, channels, pooled_rows, pooled_cols).
例子
import tensorflow as tf
import numpy as np
# 模拟图片数据
np.random.seed(9)
arr=np.random.randint(1,9,(4,4))
print(arr)
print('-'*50)
arr=arr.reshape((1,4,4,1)).astype("float32")
# 进行平均池化运算
inp=tf.keras.Input(shape=(4,4,1))
x=tf.keras.layers.AveragePooling2D()(inp)
model=tf.keras.Model(inputs=[inp],outputs=[x])
res=model(arr)
w,h=res.shape[1],res.shape[2]
res=tf.reshape(res,(w,h))
tf.print(res)
执行结果
[[7 5 7 6]
[7 1 4 7]
[6 2 7 5]
[4 1 3 2]]
--------------------------------------------------
[[5 6]
[3.25 4.25]]
理解:(7+5+7+1)/4=5