给出logits(从RNN / Lstm / Gru以时间主格式即(maxTime,batchSize,numberofClasses)输出),ctc贪婪解码器如何执行解码以生成输出序列。
我在其网页https://www.tensorflow.org/api_docs/python/tf/nn/ctc_greedy_decoder上发现了这种“对输入中给出的logit进行贪婪解码(最佳路径)”。
一种可能性是选择每个时间步长具有最大值的输出类别,折叠重复并生成相应的输出序列。是ctc贪婪解码器在这里执行其他操作吗?使用示例进行解释将非常有用。
答案 0 :(得分:0)
操作 ctc_greedy_decoder 实现最佳路径解码,这在TF源代码[1]中也有说明。
解码过程分为两个步骤:
让我们看一个例子。神经网络输出具有5个时间步长和3个字符(“ a”,“ b”和空白“-”)的矩阵。 我们在每个时间步上采用最可能的角色,这为我们提供了最佳路径:“ aaa-b”。 然后,我们删除重复的字符并得到“ a-b”。最后,我们删除所有空白并得到“ ab”作为结果。
有关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