tf.nn.ctc_greedy_decoder如何在Tensorflow中生成输出序列?

时间:2018-07-29 13:25:28

标签: python tensorflow

给出logits(从RNN / Lstm / Gru以时间主格式即(maxTime,batchSize,numberofClasses)输出),ctc贪婪解码器如何执行解码以生成输出序列。

我在其网页https://www.tensorflow.org/api_docs/python/tf/nn/ctc_greedy_decoder上发现了这种“对输入中给出的logit进行贪婪解码(最佳路径)”。

一种可能性是选择每个时间步长具有最大值的输出类别,折叠重复并生成相应的输出序列。是ctc贪婪解码器在这里执行其他操作吗?使用示例进行解释将非常有用。

1 个答案:

答案 0 :(得分:0)

操作 ctc_greedy_decoder 实现最佳路径解码,这在TF源代码[1]中也有说明。

解码过程分为两个步骤:

  1. 在每个时间步上连接最可能出现的字符,从而产生最佳路径。
  2. 然后,首先删除重复的字符,然后删除所有空格,以撤消编码。这给了我们公认的文字。

让我们看一个例子。神经网络输出具有5个时间步长和3个字符(“ a”,“ b”和空白“-”)的矩阵。 我们在每个时间步上采用最可能的角色,这为我们提供了最佳路径:“ aaa-b”。 然后,我们删除重复的字符并得到“ a-b”。最后,我们删除所有空白并得到“ ab”作为结果。

best path decoding

有关CTC的更多信息,请参见[2],有关如何在Python中使用CTC的示例,请参见[3]。


[1] ctc_greedy_decoder的实现:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/util/ctc/ctc_decoder.h#L69

[2]有关CTC,最佳路径解码和波束搜索解码的更多信息:https://towardsdatascience.com/5a889a3d85a7

[3]显示如何使用ctc_greedy_decoder的示例代码:https://github.com/githubharald/SimpleHTR/blob/master/src/Model.py#L94