池化
池化通常只需要将前一层的特征图作为输入,此外需要一些参数来确定池化具体的操作。在PaddlePaddle中我们同样通过设定池化的大小,方式,步长,是否是全局池化,是否使用cudnn,是否使用ceil函数计算输出等参数来选择具体池化的方式。 PaddlePaddle中有针对定长图像特征的二维(pool2d)、三维卷积(pool3d),RoI池化(roi_pool),以及针对序列的序列池化(sequence_pool),同时也有池化计算的反向过程,下面先介绍2D/3D池化,以及RoI池化,再来介绍序列池化。
: 池化操作接收任何符合layout是:
N(batch size)* C(channel size) * H(height) * W(width)
格式的Tensor
类型作为输入。pool_size
: 用来确定池化filter
的大小,即将多大范围内的数据池化为一个值。num_channels
: 用来确定输入的channel
数量,如果未设置参数或设置为None
,其实际值将自动设置为输入的channel
数量。pool_padding
: 用来确定池化中padding
的大小,padding
的使用是为了对于特征图边缘的特征进行池化,选择不同的pool_padding
大小确定了在特征图边缘增加多大区域的补零。从而决定边缘特征被池化的程度。global_pooling
: 意为是否使用全局池化,全局池化是指使用和特征图大小相同的filter
来进行池化,同样这个过程也可以使用平均池化或者最大池化来做为池化的方式,全局池化通常会用来替换全连接层以大量减少参数防止过拟合。use_cudnn
: 选项可以来选择是否使用cudnn来优化计算池化速度。
api汇总:
roi_pool
一般用于检测网络中,将输入特征图依据候选框池化到特定的大小。
rois
: 接收LoDTensor
类型来表示需要池化的 Regions of Interest,关于RoI的解释请参考pooled_height
和pooled_width
: 这里可以接受非正方的池化窗口大小spatial_scale
: 用作设定缩放RoI和原图缩放的比例,注意,这里的设定需要用户自行计算RoI和原图的实际缩放比例。
api汇总:
sequence_pool
是一个用作对于不等长序列进行池化的接口,它将每一个实例的全部时间步的特征进行池化,它同样支持 average
, sum
, sqrt
和max
4种类型之一作为pooling的方式。 其中:
average
是对于每一个时间步内的数据求和后分别取平均值做为池化的结果。sum
则是对每一个时间步内的数据分别求和作为池化的结果。sqrt
则是对每一个时间步内的数据分别求和再分别取平方根作为池化的结果。