From c8c30145e9b54adf02c67370cdfe4d09e09b44ff Mon Sep 17 00:00:00 2001 From: Diego Zhang Date: Fri, 11 Oct 2019 11:33:43 +0800 Subject: [PATCH] fix sequence_pad cn doc (#1398) * fix sequence_pad cn doc * add input output shape * fix length info * fix length info and pad_value info * test=document_fix --- .../api_cn/layers_cn/sequence_pad_cn.rst | 86 ++++++++----------- 1 file changed, 36 insertions(+), 50 deletions(-) diff --git a/doc/fluid/api_cn/layers_cn/sequence_pad_cn.rst b/doc/fluid/api_cn/layers_cn/sequence_pad_cn.rst index 3a070bca0..914b206c7 100644 --- a/doc/fluid/api_cn/layers_cn/sequence_pad_cn.rst +++ b/doc/fluid/api_cn/layers_cn/sequence_pad_cn.rst @@ -5,77 +5,64 @@ sequence_pad .. py:function:: paddle.fluid.layers.sequence_pad(x,pad_value,maxlen=None,name=None) -序列填充操作符(Sequence Pad Operator) +序列填充操作符(Sequence Pad Operator),该OP将同一batch中的序列填充到一个一致的长度(由 ``maxlen`` 指定)。填充的新元素的值具体由输入 ``pad_value`` 指定,并会添加到每一个序列的末尾,使得他们最终的长度保持一致。最后返回一个Python tuple ``(Out, Length)`` ,其中LodTensor ``Out`` 为填充后的序列,LodTensor ``Length`` 为填充前的原序列长度信息。 -这个操作符将同一batch中的序列填充到一个一致的长度。长度由属性padded_length指定。填充的新元素的值具体由输入 ``PadValue`` 指定,并会添加到每一个序列的末尾,使得他们最终的长度保持一致。 +注意,该OP的输入 ``x`` 只能是LodTensor。 -以下的例子更清晰地解释此操作符的工作原理: +范例如下: :: 例1: + 给定输入1-level LoDTensor x: + x.lod = [[0, 2, 5]] #输入的两个序列长度是2和3 + x.data = [[a],[b],[c],[d],[e]] + 和输入 pad_value: + pad_value.data = [0] + 设置 maxlen = 4 - 给定 1-level LoDTensor - - input(X): - X.lod = [[0,2,5]] - X.data = [a,b,c,d,e] - input(PadValue): - PadValue.data = [0] - - 'padded_length'=4 - - 得到LoDTensor: - Out.data = [[a,b,0,0],[c,d,e,0]] - Length.data = [[2],[3]] + 得到得到tuple (Out, Length): + Out.data = [[[a],[b],[0],[0]],[[c],[d],[e],[0]]] + Length.data = [2, 3] #原序列长度是2和3 :: 例2: - - 给定 1-level LoDTensor - - input(X): - X.lod = [[0,2,5]] - X.data = [[a1,a2],[b1,b2],[c1,c2],[d1,d2],[e1,e2]] - input(PadValue): - PadValue.data = [0] - - 'padded_length' = -1,表示用最长输入序列的长度(此例中为3) - - 得到LoDTensor: + 给定输入1-level LoDTensor x: + x.lod = [[0, 2, 5]] + x.data = [[a1,a2],[b1,b2],[c1,c2],[d1,d2],[e1,e2]] + 和输入 pad_value: + pad_value.data = [0] + 默认 maxlen = None, (根据x的形状,此例中实际长度为3) + + 得到得到tuple (Out, Length): Out.data = [[[a1,a2],[b1,b2],[0,0]],[[c1,c2],[d1,d2],[e1,e2]]] - Length.data = [[2],[3]] - + Length.data = [2, 3] :: 例3: - - 给定 1-level LoDTensor - - input(X): - X.lod = [[0,2,5]] - X.data = [[a1,a2],[b1,b2],[c1,c2],[d1,d2],[e1,e2]] - input(PadValue): - PadValue.data = [p1,p2] - - 'padded_length' = -1,表示用最长输入序列的长度(此例中为3) - - 得到LoDTensor: + 给定输入1-level LoDTensor x: + x.lod = [[0, 2, 5]] + x.data = [[a1,a2],[b1,b2],[c1,c2],[d1,d2],[e1,e2]] + 和输入 pad_value: + pad_value.data = [p1,p2] + 默认 maxlen = None, (根据x的形状,此例中实际长度为3) + + 得到tuple (Out, Length): Out.data = [[[a1,a2],[b1,b2],[p1,p2]],[[c1,c2],[d1,d2],[e1,e2]]] - Length.data = [[2],[3]] + Length.data = [2, 3] 参数: - - **x** (Vairable) - 输入变量,应包含lod信息 - - **pad_value** (Variable) - 变量,存有放入填充步的值。可以是标量或tensor,维度和序列的时间步长相等。如果是标量,则自动广播到时间步长的维度 - - **maxlen** (int,默认None) - 填充序列的长度。可以为空或者任意正整数。当为空时,以序列中最长序列的长度为准,其他所有序列填充至该长度。当是某个特定的正整数,最大长度必须大于最长初始序列的长度 - - **name** (str|None) – 该层的命名(可选项)。 如果为 None, 则自动命名 + - **x** (Vairable) - 输入,维度为 ``[M, K]`` 的LoDTensor,仅支持lod_level为1。lod所描述的序列数量,作为要填充的batch_size。数据类型为int32,int64,float32或float64。 + - **pad_value** (Variable) - 填充值,可以是标量或长度为 ``K`` 的一维Tensor。如果是标量,则自动广播为Tensor。数据类型需与 ``x`` 相同。 + - **maxlen** (int,可选) - 填充序列的长度。默认为None,此时以序列中最长序列的长度为准,其他所有序列填充至该长度。当是某个特定的正整数,最大长度必须大于最长初始序列的长度。 + - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name` ,一般无需设置,默认值为None。 -返回:填充序列批(batch)和填充前的初始长度。所有输出序列的长度相等 +返回:元素为两个LoDTensor的Python tuple。第一个元素为填充后的变量 ``Out`` ,形状为 ``[batch_size, maxlen, K]`` ,lod level为0的LoDTensor,数据类型与输入 ``x`` 相同。第二个元素为填充前的原序列长度信息 ``Length`` ,lod level为0的一维LoDTensor,长度等于batch_size,数据类型为int64。 -返回类型:变量(Variable) +返回类型:tuple **代码示例**: @@ -97,4 +84,3 @@ sequence_pad - -- GitLab