给定 logits(从 RNN/Lstm/Gru 以时间主要格式输出,即(maxTime、batchSize、numberofClasses)),ctc greedy decoder 如何执行解码以生成输出序列。
我在其网页 https://www.tensorflow.org/api_docs/python/tf/nn/ctc_greedy_decoder 上发现了这个“对输入中给定的 logits(最佳路径)执行贪婪解码” .
一种可能性是在每个时间步选择具有最大值的输出类别,折叠重复并生成相应的输出序列。是不是,ctc greedy decoder 在这里做还是别的什么?使用示例进行说明将非常有用。
最佳答案
ctc_greedy_decoder操作实现最佳路径解码,TF源码[1]中也有说明。
解码分两步完成:
- 连接每个时间步最可能的字符,从而产生最佳路径。
- 然后,通过先删除重复字符然后删除所有空格来撤消编码。这为我们提供了可识别的文本。
让我们看一个例子。神经网络输出一个包含 5 个时间步长和 3 个字符(“a”、“b”和空白“-”)的矩阵。 我们在每个时间步取最可能的字符,这给了我们最好的路径:“aaa-b”。 然后,我们删除重复的字符并得到“a-b”。最后,我们去掉所有的空格,得到“ab”作为结果。
关于 CTC 的更多信息可以在 [2] 中找到,如何在 Python 中使用它的示例在 [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
关于python - tf.nn.ctc_greedy_decoder如何在tensorflow中生成输出序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51580751/