sequence_last_step

  • paddle.fluid.layers.sequence_last_step(input)[源代码]

该OP 仅支持LoDTensor类型的输入 ,将对输入的LoDTensor,在最后一层lod_level上,选取其每个序列(sequence)的最后一个时间步(time-step)的特征向量作为池化后的输出向量。

  1. Case 1:
  2.  
  3. input1-levelLoDTensor:
  4. input.lod = [[0, 2, 5, 7]]
  5. input.data = [[1.], [3.], [2.], [4.], [6.], [5.], [1.]]
  6. input.shape = [7, 1]
  7.  
  8. 输出为LoDTensor:
  9. out.shape = [3, 1]
  10. out.shape[0] == len(x.lod[-1]) == 3
  11.  
  12. out.data = [[3.], [6.], [1.]], where 3.=last(1., 3.), 6.=last(2., 4., 6.), 1.=last(5., 1.)
  13.  
  14. Case 2:
  15.  
  16. input2-levelLoDTensor, 包含3个长度分别为[2, 0, 3]的序列,其中中间的0表示序列为空。
  17. 第一个长度为2的序列包含2个长度分别为[1, 2]的子序列;
  18. 最后一个长度为3的序列包含3个长度分别为[1, 0, 3]的子序列。
  19. input.lod = [[0, 2, 2, 5], [0, 1, 3, 4, 4, 7]]
  20. input.data = [[1.], [3.], [2.], [4.], [6.], [5.], [1.]]
  21. input.shape = [7, 1]
  22.  
  23. 将根据最后一层的lod信息[0, 1, 3, 4, 4, 7]进行池化操作,且pad_value = 0.0
  24. 输出为LoDTensor
  25. out.shape= [5, 1]
  26. out.lod = [[0, 2, 2, 5]]
  27. 其中 out.shape[0] == len(x.lod[-1]) == 5
  28. out.data = [[1.], [2.], [4.], [0.0], [1.]]
  29. where 1.=last(1.), 2.=last(3., 2.), 4.=last(4.), 0.0 = pad_value, 1=last(6., 5., 1.)

参数:input (Variable)- 类型为LoDTensor的输入序列,仅支持lod_level不超过2的LoDTensor,数据类型为float32。

返回:每个输入序列中的最后一步特征向量组成的LoDTensor,数据类型为float32。

返回类型:Variable

代码示例

  1. import paddle.fluid as fluid
  2. x = fluid.layers.data(name='x', shape=[7, 1], append_batch_size=False,
  3. dtype='float32', lod_level=1)
  4. x_last_step = fluid.layers.sequence_last_step(input=x)