|
|
|
@ -521,8 +521,52 @@ def conv2d(input,
|
|
|
|
|
def sequence_pool(input, pool_type, **kwargs):
|
|
|
|
|
"""
|
|
|
|
|
This function add the operator for sequence pooling.
|
|
|
|
|
This is applied on top of the input using pool_type mentioned
|
|
|
|
|
in the parameters.
|
|
|
|
|
It pools features of all time-steps of each instance, and is applied
|
|
|
|
|
on top of the input using pool_type mentioned in the parameters.
|
|
|
|
|
|
|
|
|
|
It supports four pool_type:
|
|
|
|
|
|
|
|
|
|
- average: :math:`Out[i] = \\frac{\sum_i X_i}{N}`
|
|
|
|
|
- sum: :math:`Out[i] = \sum_jX_{ij}`
|
|
|
|
|
- sqrt: :math:`Out[i] = \\frac{\sum_jX_{ij}}{\sqrt{len(X_i)}}`
|
|
|
|
|
- max: :math:`Out[i] = max(X_i)`
|
|
|
|
|
|
|
|
|
|
.. code-block:: text
|
|
|
|
|
|
|
|
|
|
x is a 1-level LoDTensor:
|
|
|
|
|
x.lod = [[0, 2, 5, 7]]
|
|
|
|
|
x.data = [1, 3, 2, 4, 6, 5, 1]
|
|
|
|
|
x.dims = [7, 1]
|
|
|
|
|
|
|
|
|
|
then output is a Tensor:
|
|
|
|
|
out.dim = [3, 1]
|
|
|
|
|
with condition len(x.lod[-1]) - 1 == out.dims[0]
|
|
|
|
|
|
|
|
|
|
for different pool_type:
|
|
|
|
|
average: out.data = [2, 4, 3], where 2=(1+3)/2, 4=(2+4+6)/3, 3=(5+1)/2
|
|
|
|
|
sum : out.data = [4, 12, 6], where 4=1+3, 12=2+4+6, 6=5+1
|
|
|
|
|
sqrt : out.data = [2.82, 6.93, 4.24], where 2.82=(1+3)/sqrt(2),
|
|
|
|
|
6.93=(2+4+6)/sqrt(3), 4.24=(5+1)/sqrt(2)
|
|
|
|
|
max : out.data = [3, 6, 5], where 3=max(1,3), 6=max(2,4,6), 5=max(5,1)
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
input(variable): The input variable which is a LoDTensor.
|
|
|
|
|
pool_type (string): The pooling type of sequence_pool.
|
|
|
|
|
It supports average, sum, sqrt and max.
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
The sequence pooling variable which is a Tensor.
|
|
|
|
|
|
|
|
|
|
Examples:
|
|
|
|
|
|
|
|
|
|
.. code-block:: python
|
|
|
|
|
|
|
|
|
|
x = fluid.layers.data(name='x', shape=[7, 1],
|
|
|
|
|
dtype='float32', lod_level=1)
|
|
|
|
|
avg_x = fluid.layers.sequence_pool(input=x, pool_type='average')
|
|
|
|
|
sum_x = fluid.layers.sequence_pool(input=x, pool_type='sum')
|
|
|
|
|
sqrt_x = fluid.layers.sequence_pool(input=x, pool_type='sqrt')
|
|
|
|
|
max_x = fluid.layers.sequence_pool(input=x, pool_type='max')
|
|
|
|
|
"""
|
|
|
|
|
helper = LayerHelper('sequence_pool', input=input, **kwargs)
|
|
|
|
|
dtype = helper.input_dtype()
|
|
|
|
|