sequence_softmax_cn.rst 2.9 KB
Newer Older
1 2 3 4 5 6
.. raw:: html
   
    <style> .red {color:red; font-weight:bold} </style>

.. role:: red

H
Hao Wang 已提交
7 8 9 10 11 12 13
.. _cn_api_fluid_layers_sequence_softmax:

sequence_softmax
-------------------------------

.. py:function:: paddle.fluid.layers.sequence_softmax(input, use_cudnn=False, name=None)

14
:red:`注意:该OP的输入只能是LoDTensor,如果要处理的输入是Tensor类型,请使用`  :ref:`cn_api_fluid_layers_softmax` 
H
Hao Wang 已提交
15

16
该OP根据LoD信息将输入的第0维度进行划分,在划分的每一个区间内部进行运算。
H
Hao Wang 已提交
17

18
对第i个区间内的元素的计算公式如下:
H
Hao Wang 已提交
19 20 21 22 23

.. math::

    Out\left ( X[lod[i]:lod[i+1]],: \right ) = \frac{exp(X[lod[i]:lod[i+1],:])}{\sum (exp(X[lod[i]:lod[i+1],:]))}

24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
输入Tensor的维度可为 :math:`[N,1]` 或者 :math:`[N]` ,推荐使用 :math:`[N]` 。

例如,对有6个样本的batch,每个样本的长度为2,3,4,1,2,3,其lod信息为[[0, 3, 5, 9, 10, 12, 15]],根据lod信息将第0维度划分为6份,在 :math:`X[0:3,:],X[3:5,:],X[5:9,:],X[9:10,:],X[10:12,:],X[12:15,:]`  中进行softmax运算。

::

     示例:

             给定:
                   input.data = [0.7, 1, 0.6,
                                 1.5, 1.1,
                                 1.2, 0.2, 0.6, 1.9,
                                 3.1,
                                 2.5, 0.8,
                                 0.1, 2.4, 1.3]
                   input.lod = [[0, 3, 5, 9, 10, 12, 15]]
              则:
                   output.data = [0.30724832, 0.41474187, 0.2780098,
                                  0.59868765, 0.40131235,
                                  0.2544242, 0.09359743, 0.13963096, 0.5123474, 
                                  1.,
                                  0.84553474, 0.15446526,
                                  0.06995796, 0.69777346, 0.23226859]
                   output.lod = [[0, 3, 5, 9, 10, 12, 15]] 

H
Hao Wang 已提交
49 50

参数:
51 52 53
    - **input** (Variable) - 维度为 :math:`[N, 1]` 或者 :math:`[N]` 的LoDTensor,推荐使用 :math:`[N]` 。数据类型为float32或float64。
    - **use_cudnn** (bool,可选) - 是否用cudnn核,仅当安装cudnn版本的paddle库且使用gpu训练或推理的时候生效。数据类型为bool型,默认值为False。
    - **name**  (str,可选) – 具体用法请参见 :ref:`api_guide_Name` ,一般无需设置,默认值为None。
H
Hao Wang 已提交
54

55
返回:根据区间计算softmax之后的LoDTensor,其维度与input的维度一致,数据类型与input的数据类型一致。
H
Hao Wang 已提交
56

57
返回类型:Variable
H
Hao Wang 已提交
58 59 60 61 62 63 64 65 66

**代码示例**:

.. code-block:: python

    import paddle.fluid as fluid
    x = fluid.layers.data(name='x', shape=[7, 1],
                 dtype='float32', lod_level=1)
    x_sequence_softmax = fluid.layers.sequence_softmax(input=x)
67 68 69 70
    
    y = fluid.layers.data(name='y', shape=[7],
                 dtype='float32', lod_level=1)
    x_sequence_softmax = fluid.layers.sequence_softmax(input=y)
H
Hao Wang 已提交
71 72 73 74 75 76 77