• 如果您觉得本站非常有看点，那么赶紧使用Ctrl+D 收藏吧

# 【小白学PyTorch】21 Keras的API详解（下）池化、Normalization层

7天前 12次浏览

• 1 池化层
• 1.1 最大池化层
• 1.2 平均池化层
• 1.3 全局最大池化层
• 1.4 全局平均池化层
• 2 Normalization
• 2.1 BN
• 2.2 LN

• 四个的池化层；
• 两个Normalization层;

## 1 池化层

### 1.1 最大池化层

``````tf.keras.layers.MaxPooling2D(
pool_size=(2, 2), strides=None, padding="valid", data_format=None, **kwargs
)
``````

``````import tensorflow as tf
x = tf.random.normal((4,28,28,3))
y = tf.keras.layers.MaxPooling2D(
pool_size=(2,2))
print(y(x).shape)
>>> (4, 14, 14, 3)
``````

``````import tensorflow as tf
x = tf.random.normal((4,28,28,3))
y = tf.keras.layers.MaxPooling2D(
pool_size=(2,2),
strides = 1)
print(y(x).shape)
>>> (4, 27, 27, 3)
``````

``````import tensorflow as tf
x = tf.random.normal((4,28,28,3))
y = tf.keras.layers.MaxPooling2D(
pool_size=(2,2),
strides = 1,
print(y(x).shape)
>>> (4, 28, 28, 3)
``````

### 1.2 平均池化层

``````tf.keras.layers.AveragePooling2D(
pool_size=(2, 2), strides=None, padding="valid", data_format=None, **kwargs
)
``````

### 1.3 全局最大池化层

``````tf.keras.layers.GlobalMaxPooling2D(data_format=None, **kwargs)
``````

``````import tensorflow as tf
x = tf.random.normal((4,28,28,3))
y = tf.keras.layers.GlobalMaxPooling2D()
print(y(x).shape)
>>> (4, 3)
``````

### 1.4 全局平均池化层

``````tf.keras.layers.GlobalAveragePooling2D(data_format=None, **kwargs)
``````

## 2 Normalization

Keras官方只提供了两种Normalization的方法，一个是BatchNormalization，一个是LayerNormalization。虽然没有提供InstanceNormalization和GroupNormalization的方法，我们可以通过修改BN层的参数来构建。

### 2.1 BN

``````tf.keras.layers.BatchNormalization(
axis=-1,
momentum=0.99,
epsilon=0.001,
center=True,
scale=True,
beta_initializer="zeros",
gamma_initializer="ones",
moving_mean_initializer="zeros",
moving_variance_initializer="ones",
beta_regularizer=None,
gamma_regularizer=None,
beta_constraint=None,
gamma_constraint=None,
renorm=False,
renorm_clipping=None,
renorm_momentum=0.99,
fused=None,
trainable=True,
virtual_batch_size=None,
name=None,
**kwargs
)
``````

• axis：整数。表示哪一个维度是通道数维度，默认是-1，表示是最后一个维度。如果之前设置了`channels_first`,那么需要设置axis=1.
• momentum：当training过程中，Batch的均值方差会根据batch计算出来，在预测或者验证的时候，这个均值方差是采用training过程中计算出来的滑动均值和滑动方差的。具体的计算过程是：
• epsilon:一个防止运算除法除以0的一个极小数，一般不做修改；
• center：True的话，则会有一个可训练参数beta，也就是beta均值的这个offset；如果是False的话，这个BN层则退化成以0为均值，gamma为标准差的Normalization。默认是True，一般不做修改。
• scale：与center类似，默认是True。如果是False的话，则不使用gamma参数，BN层退化成以beta为均值，1为标准差的Normalization层。
• 其他都是初始化的方法和正则化的方法，一般不加以限制，使用的方法在上节课也已经讲解了，在此不加赘述。

### 2.2 LN

``````tf.keras.layers.LayerNormalization(
axis=-1,
epsilon=0.001,
center=True,
scale=True,
beta_initializer="zeros",
gamma_initializer="ones",
beta_regularizer=None,
gamma_regularizer=None,
beta_constraint=None,
gamma_constraint=None,
trainable=True,
name=None,
**kwargs
)
``````

``````import tensorflow as tf
import numpy as np
x = tf.constant(np.arange(10).reshape(5,2)*10,
dtype=tf.float32)
print(x)
y = tf.keras.layers.LayerNormalization(axis=1)
print(y(x))
``````

``````tf.Tensor(
[[ 0. 10.]
[20. 30.]
[40. 50.]
[60. 70.]
[80. 90.]], shape=(5, 2), dtype=float32)
tf.Tensor(
[[-0.99998  0.99998]
[-0.99998  0.99998]
[-0.99998  0.99998]
[-0.99998  0.99998]
[-0.99998  0.99998]], shape=(5, 2), dtype=float32)
``````