ctc_greedy_decoder

  • paddle.fluid.layers.ctc_greedy_decoder(input, blank, name=None)[源代码]

注意:该OP的输入input必须是2维LoDTensor, lod_level为1

  • 该OP用于贪婪策略解码序列,步骤如下:
  • 获取输入中的每一行的最大值索引,也就是numpy.argmax(input, axis=0)。
  • 对于step1结果中的每个序列,合并两个空格之间的重复部分并删除所有空格。

样例

  1. 已知:
  2.  
  3. input.data = [[0.6, 0.1, 0.3, 0.1],
  4. [0.3, 0.2, 0.4, 0.1],
  5. [0.1, 0.5, 0.1, 0.3],
  6. [0.5, 0.1, 0.3, 0.1],
  7.  
  8. [0.5, 0.1, 0.3, 0.1],
  9. [0.2, 0.2, 0.2, 0.4],
  10. [0.2, 0.2, 0.1, 0.5],
  11. [0.5, 0.1, 0.3, 0.1]]
  12.  
  13. input.lod = [[4, 4]]
  14.  
  15. 计算过程:
  16.  
  17. 1. argmax的运算结果应用于输入的第一个序列,即 input.data[0:4]
  18. 则得出的结果为[[0], [2], [1], [0]]
  19. 2. 合并重复的索引值部分,删除空格,即为0的值。
  20. 则第一个输入序列对应的输出为:[[2], [1]]
  21.  
  22. 最后
  23.  
  24. output.data = [[2],
  25. [1],
  26. [3]]
  27.  
  28. output.lod = [[2, 1]]
  • 参数:
    • input (Variable) — 变长序列的概率,2维LoDTensor, lod_level为1。它的形状是[Lp, num_classes + 1],其中Lp是所有输入序列长度的和,num_classes是类别数目(不包括空白标签)。数据类型是float32或者float64
    • blank (int) — Connectionist Temporal Classification (CTC) loss空白标签索引, 其数值属于半开区间[0,num_classes + 1)
    • name (str) — (str|None,可选) – 该参数供开发人员打印调试信息时使用,具体用法请参见 Name ,默认值为None

返回: CTC贪婪解码结果是一个形为(Lp,1)的2维LoDTensor,lod_level为1,其中Lp是所有输出序列的长度之和。如果结果中的所有序列都为空,则输出LoDTensor为[-1],其lod信息为空。

返回类型: Variable

代码示例

  1. import paddle.fluid as fluid
  2. x = fluid.layers.data(name='x', shape=[8], dtype='float32')
  3. cost = fluid.layers.ctc_greedy_decoder(input=x, blank=0)