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

3
给定 logits(来自 RNN/Lstm/Gru 输出,以时间为主要格式,即(maxTime,batchSize,numberofClasses)),ctc 贪心解码器如何执行解码以生成输出序列。
我在其网页https://www.tensorflow.org/api_docs/python/tf/nn/ctc_greedy_decoder上发现了“对输入中给定的 logits 执行贪心解码(最佳路径)”。
一种可能性是在每个时间步选择具有最大值的输出类别,折叠重复并生成相应的输出序列。ctc 贪心解码器是否正在这里执行或者还有其他操作?使用示例进行说明将非常有用。
1个回答

8
操作ctc_greedy_decoder实现了最佳路径解码,这也在TF源代码[1]中说明。
解码分为两个步骤:
1.每个时间步连接最可能的字符,得到最佳路径。 2.然后,通过先删除重复字符,再删除所有空格来撤销编码。这给我们识别出的文本。
让我们看一个例子。神经网络输出一个具有5个时间步长和3个字符("a","b"和空白符"-")的矩阵。 我们取每个时间步的最可能字符,得到最佳路径:"aaa-b"。 然后,我们删除重复的字符,得到"a-b"。最后,我们删除所有空格,得到"ab"作为结果。

best path decoding

关于CTC的更多信息可以在[2]中找到,在[3]中展示了如何在Python中使用它的示例。


[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

感谢@Harry的回答。 - abhi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接