问题标签 [ctc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 如何正确使用 tensorflow ctc 光束搜索?
我想对音素概率值矩阵(给出的 ASR 模型的输出)执行 CTC Beam Search。Tensorflow 有一个 CTC Beam Search实现,但它的文档记录很差,我没有给出一个有效的例子。我想编写一个代码以将其用作基准。
到目前为止,这是我的代码:
我在理解代码时遇到问题:
- 在示例中,垫子的形状为 (2, 4),但 tensorflow 模块需要 (2, 1, 4) 形状,所以我用它重塑垫子,
matrix = np.reshape(matrix, (matrix.shape[0], 1,matrix.shape[1]))
但这在数学上意味着什么?垫子和矩阵是一样的吗?还是我在这里混在一起?中间的 1 是我理解的批量大小。 - decode_ctcBeam函数返回一个列表,在它给出的示例中 [2],这应该意味着来自已定义类的“CH” 。如果我有一个更大的输入矩阵,比如说 40 个音素,我该如何概括这一点并找到识别的音素序列?
期待您的回答/评论!谢谢!
python-3.x - CTC + BLSTM 架构在第一个 epoch 之前停止/挂起
我正在研究识别在线手写识别的代码。它适用于 CTC 损失函数和 Word Beam Search(自定义实现:githubharald)
TF 版本:1.14.0
以下是使用的参数:
我面临的问题是,在将解码器从 CTC Greedy Decoder 更改为 Word Beam Search 之后,我的代码在特定步骤后停止。它没有显示第一个 epoch 的输出,现在卡在那里大约 5-6 小时。
它被卡住的步骤:tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcublas.so.10
我正在使用 Nvidia DGX-2 进行训练(名称:Tesla V100-SXM3-32GB)
python - Keras/Tensorflow 中的自定义 CTC 损失函数
我觉得我从根本上误解了一些东西。我浏览了 Keras 文档,但无济于事。我正在尝试为我的神经网络实现 ctc_batch_cost 损失。我的神经网络以 LSTM 层结束,该层将序列返回到具有 4+1 个符号 softmax 输出的密集层中。输出形状有 20 个时间步长,如下所示:
我的标签只是应该输出的可变长度的字符串。
这是我对 CTC 功能的尝试:
现在,当然,Tensorflow 当前出现以下错误:
这是可以理解的,因为在编译时变量,例如samples
will be None
。但我不知道如何使用它。任何提示表示赞赏。我想了解正在发生的事情,而不仅仅是简单地解决问题。我尝试测试None
并返回一个占位符,但这也不起作用,一开始感觉就像一个黑客。
谢谢
deep-learning - CTC语音识别中常用的前缀波束搜索可以用这种更简单的方式实现吗?
最近在学习语音识别,了解到前缀beam search的思想是把具有相同前缀的路径合并起来,比如[1,1,_]
and [_,1,_]
(可以看到,_
表示空白标记)。
基于这种理解,我实现了我的一个版本,可以使用如下伪代码进行简化:
但是我在网上找到的大多数版本(根据论文)都是这样的:
两者的结果不同,我的版本倾向于返回更长的字符串。而且我不太了解主要的两个方面:
- 我的版本有什么细节没有考虑到吗?
- 通用版本同时生成新前缀,
new_prefix = prefix + (i,)
无论前一个的结尾是否与给定的's'相同。例如,旧前缀是[a,a,b]
and,当添加新字符 s 时,都保存[a,a,b]
和[a,a,b,b]
。如果这样做有什么目的?它会导致重复计算吗?
期待您的回答,提前致谢!
python - TensorFlow 回调作为 CTC 的自定义指标
为了在训练我的模型(用 TensorFlow 版本 2.1.0 编写)期间产生更多指标,例如字符错误率 (CER) 和字错误率 (WER),我创建了一个回调以传递给我的 fit 函数模型。它能够在一个纪元结束时生成 CER 和 WER。这是我的第二选择,因为我想为此创建一个自定义指标,但您只能将 Keras 后端功能用于自定义指标。有没有人对如何将下面的回调转换为自定义指标(然后可以在验证和/或训练数据的训练期间计算)有任何建议?
我遇到的一些障碍是:
- 未能将 K.ctc_decode 结果转换为稀疏张量
- 如何使用 Keras 后端计算像 editdistance 这样的距离?
tensorflow - 如何在 keras 中使用 tensorflow ctc_batch_cost 函数?
几天来,我一直在尝试在 keras 中实现 CTC 损失函数。
不幸的是,我还没有找到一种适合 keras 的简单方法。我找到了 tensorflow 的tf.keras.backend.ctc_batch_cost
功能,但没有太多关于它的文档。我对一些事情感到困惑。首先,input_length
和label_length
参数是什么?我正在尝试制作一个手写识别模型,我的图像是 32x128,我的 RNN 有 32 个时间步长,我的字符列表的长度为 80。我尝试对两个参数都使用 32,这给了我下面的错误。
函数不应该已经从前两个参数(和)的形状中知道input_length
和吗?label_length
y_true
y_pred
其次,我需要对训练数据进行编码吗?这一切都是自动完成的吗?
我知道 tensorflow 也有一个名为tf.keras.backend.ctc_decode
. 这仅在进行预测时使用吗?
错误:
tensorflow.python.framework.errors_impl.InvalidArgumentError:squeeze_dims[0] 不在 [0,0) 中。对于具有输入形状的“loss/softmax_loss/Squeeze”(操作:“Squeeze”):[]
模型:
这是我引用的 tensorflow 文档:
https://www.tensorflow.org/api_docs/python/tf/keras/backend/ctc_batch_cost
loss-function - 具有 CTC 损失的 CNN
我想使用预训练的 CNN 模型(ResNet50、VGG 等)提取特征,并将这些特征与 CTC 损失函数一起使用。
我想将其构建为文本识别模型。
任何人都知道我该如何实现这一目标?
python - 了解 K.ctc_decode
这是 Keras测试test_ctc_decode_greedy
。ctc_decode
这是我稍作修改的示例:
输出:
问题:
在推理时,我们如何获得预测的有效时间步数(例如,一些最后一行被忽略)?据我了解,我们有固定大小的矩阵作为网络的输出,我们是否需要另一个输出来预测有效时间步的数量?
据我了解
log_prob
是负对数似然(值越小越好->网络对输出更有信心),但由于时间步数可能不同,log_prob
不同时间步长的样本之间的值不可比较(因为我不看不到长度的任何归一化)?
更新:
为了在这里提供更多上下文,我使用真实字母和文本编码/解码的更具可读性的示例,在这里我使用input_length = n_time_steps
:
输出:
machine-learning - 语音识别中的置信度分数是什么意思?
许多语音转文本服务(例如 Google 的)提供了置信度分数。至少对于谷歌来说,它介于 0 和 1 之间,但显然不是特定转录正确的概率,因为替代转录的置信度加起来超过 1。此外,有时置信度较高的结果排名较低。
那么,它是什么?语音识别社区中是否存在公认的“置信度分数”含义?我已经看到对最小贝叶斯风险的引用,但即使这是他们正在做的事情,这也不能回答这个问题,因为这取决于辅助损失函数的选择。
tensorflow - 无效参数:目标转换序列没有足够的时间
如何从我的代码中将此错误转换为警告(ignore_longer_outputs_than_inputs)?[.ipynb]
如果你愿意,你可以在这里查看我的完整代码:https ://colab.research.google.com/drive/1nMRNUsLDNrpgeTxPFQ4mhobnFdpbmwUx