sequence_last_step_cn.rst 2.2 KB
Newer Older
H
Hao Wang 已提交
1 2 3 4 5
.. _cn_api_fluid_layers_sequence_last_step:

sequence_last_step
-------------------------------

6 7
**注意:该API仅支持【静态图】模式**

H
Hao Wang 已提交
8 9
.. py:function:: paddle.fluid.layers.sequence_last_step(input)

A
Aurelius84 已提交
10
该OP **仅支持LoDTensor类型的输入** ,将对输入的LoDTensor,在最后一层lod_level上,选取其每个序列(sequence)的最后一个时间步(time-step)的特征向量作为池化后的输出向量。
H
Hao Wang 已提交
11 12 13

::

A
Aurelius84 已提交
14
    Case 1:
H
Hao Wang 已提交
15

A
Aurelius84 已提交
16 17 18 19
        input是1-level的LoDTensor:
            input.lod = [[0, 2, 5, 7]]
            input.data = [[1.], [3.], [2.], [4.], [6.], [5.], [1.]]
            input.shape = [7, 1]
H
Hao Wang 已提交
20

A
Aurelius84 已提交
21 22 23
        输出为LoDTensor:
            out.shape = [3, 1]
            且 out.shape[0] == len(x.lod[-1]) == 3
H
Hao Wang 已提交
24

A
Aurelius84 已提交
25
            out.data = [[3.], [6.], [1.]], where 3.=last(1., 3.), 6.=last(2., 4., 6.), 1.=last(5., 1.)
H
Hao Wang 已提交
26

A
Aurelius84 已提交
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
    Case 2:
    
        input是2-level的LoDTensor, 包含3个长度分别为[2, 0, 3]的序列,其中中间的0表示序列为空。
        第一个长度为2的序列包含2个长度分别为[1, 2]的子序列;
        最后一个长度为3的序列包含3个长度分别为[1, 0, 3]的子序列。
            input.lod = [[0, 2, 2, 5], [0, 1, 3, 4, 4, 7]]
            input.data = [[1.], [3.], [2.], [4.], [6.], [5.], [1.]]
            input.shape = [7, 1]
        
        将根据最后一层的lod信息[0, 1, 3, 4, 4, 7]进行池化操作,且pad_value = 0.0
        输出为LoDTensor:
            out.shape= [5, 1]
            out.lod = [[0, 2, 2, 5]]
            其中 out.shape[0] == len(x.lod[-1]) == 5
            out.data = [[1.], [2.], [4.], [0.0], [1.]]
            where 1.=last(1.), 2.=last(3., 2.), 4.=last(4.), 0.0 = pad_value, 1=last(6., 5., 1.)
H
Hao Wang 已提交
43

A
Aurelius84 已提交
44
参数:**input** (Variable)- 类型为LoDTensor的输入序列,仅支持lod_level不超过2的LoDTensor,数据类型为float32。
H
Hao Wang 已提交
45

A
Aurelius84 已提交
46
返回:每个输入序列中的最后一步特征向量组成的LoDTensor,数据类型为float32。
H
Hao Wang 已提交
47

A
Aurelius84 已提交
48
返回类型:Variable
H
Hao Wang 已提交
49 50 51 52 53 54

**代码示例**:

.. code-block:: python

    import paddle.fluid as fluid
A
Aurelius84 已提交
55
    x = fluid.layers.data(name='x', shape=[7, 1], append_batch_size=False,
H
Hao Wang 已提交
56 57 58 59 60 61 62 63 64 65 66
                 dtype='float32', lod_level=1)
    x_last_step = fluid.layers.sequence_last_step(input=x)