用于从 Keras 读取验证码的 OCR 模型作者:A_K_Nain 将字符映射到整数将整数映射回原始字符​​h3> num_to_char = layers.experimental.preprocessing.StringLookup( vocabulary=char_to_num.get_vocabulary(),invert=True ) 正向和反向查找对

问题描述

我在 colab 中为应用于来自 kaggle 的单词 mnist 数据集的 OCR 模型工作。我受到来自 ocr captcha 的模型的启发,该模型由 A_K_Nain 在网站托管的 Keras 示例中编写,其中包含 LSTM 和 CTC 层:https://keras.io/examples/vision/captcha_ocr/

它对我有用。但是现在我在编码和解码字符与数字之间有很多问题。我试图在 ocring captcha 站点编译模型,但我发现了同样的问题。 谁能解释一下是什么问题,以及是否有办法解决这个问题。

我认为问题出在以下代码中:

将字符映射为整数

char_to_num = layers.experimental.preprocessing.StringLookup(
    vocabulary=list(characters),num_oov_indices=0,mask_token=None
)

将整数映射回原始字符​​strong>

num_to_char = layers.experimental.preprocessing.StringLookup(
    vocabulary=char_to_num.get_vocabulary(),mask_token=None,invert=True
)

这可能在他的功能中存在一些问题。

解决方法

删除 num_oov_indices=0mask_token=None 对我有用。

将字符映射到整数


char_to_num = layers.experimental.preprocessing.StringLookup(
    vocabulary=list(characters))

将整数映射回原始字符​​h3>
num_to_char = layers.experimental.preprocessing.StringLookup(
    vocabulary=char_to_num.get_vocabulary(),invert=True
)

这是张量流文档中的 tutorial

正向和反向查找对

此示例演示了如何使用标准查找层的词汇来创建逆查找层。

data = tf.constant([["a","c","d"],["d","z","b"]])
layer = StringLookup(vocabulary=vocab)
i_layer = StringLookup(vocabulary=vocab,invert=True)
int_data = layer(data)
i_layer(int_data)