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

标签 python tensorflow

给定 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]中也有说明。

解码分两步完成:

  1. 连接每个时间步最可能的字符,从而产生最佳路径。
  2. 然后,通过先删除重复字符然后删除所有空格来撤消编码。这为我们提供了可识别的文本。

让我们看一个例子。神经网络输出一个包含 5 个时间步长和 3 个字符(“a”、“b”和空白“-”)的矩阵。 我们在每个时间步取最可能的字符,这给了我们最好的路径:“aaa-b”。 然后,我们删除重复的字符并得到“a-b”。最后,我们去掉所有的空格,得到“ab”作为结果。

best path decoding

关于 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/

相关文章:

Python Flask 应用程序验证文本字段 - 不允许有空格

python - Pandas dataframe 合并的一个特例

python - 将单个整数转换为列表

tensorflow - 即使指定了种子,tf.random.shuffle 也不会给出可重现的结果

python - 如何在tensorflow v2中启用cuda统一内存

python - 强制 scrapy 抓取链接以使其出现

python - 为什么一个方法可以引用一个 undefined variable ?

python - 在 Tensorflow 中捕获 ffmpeg 错误

tensorflow - 如何在 TensorFlow 中使用带有 PCA 的 'sphereize data' 选项

tensorflow - 如何在 Keras 中实现损失函数的像素加权?