问题标签 [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.

0 投票
1 回答
146 浏览

tensorflow - Tensorflow2.0 中模型训练的 CTC_Loss

我正在做一个项目,我们必须使用 ctc_batch_cost 进行损失。我定义了返回 CTC 损失的函数并尝试在“model.compile”语句中使用它。但是在这里,我无法弄清楚如何获得“y_pred”。有人可以帮我修复这个“model.compile”语句吗?

CTC损失函数

根据此处的 tensorflow 文档,我们需要提供 ['y_true','y_pred','input_length','label_length']。我的数据框有 10000 个数据点,我的模型有一个输出层model.add(Dense(78, activation='softmax'))

所以我创建了一个包含 10000 个元素的 78 列表作为 input_length input_length = [78]*10000

我将原始单词的长度转换为 label_length 如下:

我已将样本中的每个单词编码为 78 个字符的向量,并创建了一个大小为 (10000,78) 的数组。我将其传递为 y_true

但是如何在编译模型之前获得“y_pred”?我应该先用“categorical_cross_entropy”等其他损失函数编译和训练模型以获得 y_pred 吗?如果是,这是否意味着我必须编译和训练我的模型两次。首先使用“categorical_cross_entropy”,然后使用“ctc_loss”

编译模型

0 投票
0 回答
150 浏览

tensorflow - ValueError: Shape (None, 17) must have rank 1

我正在研究手字符识别模型。我创建了一个 CNN+BiLSTM+CTC 损失模型。但是当我运行时出错model.fit()。请帮我解决这个错误。

我的模特

定义一个将先前模型的输出作为输入的 CTC 损失模型

我得到的错误是

0 投票
1 回答
434 浏览

python - ctcdecode 安装失败 - 命令“python setup.py egg_info”失败,错误代码 1 在 /tmp/pip-req-build-7zcjual1/

我尝试在 ubuntu 18.04 上安装 ctcdecode,但这并不容易。
首先,我将存储库克隆到我的服务器,当我“pip install”时发生错误。在克隆的根存储库中。
这是安装指南。
git clone --recursive https://github.com/parlance/ctcdecode.git
cd ctcdecode && pip install 。

这是我的错误信息

我搜索了几天的解决方案。
许多人建议升级 setuptools,但它没有用。
我该怎么做才能解决我的问题。
请帮忙。我期待你的评论。
提前致谢。

0 投票
1 回答
1095 浏览

tensorflow - 如何使用具有可变长度特征和标签的 TF CTC 损失

我想用 Tensorflow 实现一个带有 CTC 损失的语音识别器。输入特征具有可变长度,因为每个语音话语都可以具有可变长度。标签也具有可变长度,因为每个转录是不同的。我手动填充特征来创建批次,在我的模型中我有 tf.keras.layers.Masking() 层来创建和传播掩码通过网络。我还创建了带有填充的标签批次。

这是一个虚拟示例。假设我有两个长度分别为 3 帧和 5 帧的话语。每帧由一个特征表示(通常这将是 13 个 MFCC,但我将其减少到一个以保持简单)。因此,为了创建批处理,我在最后用 0 填充简短的话语:

标签是这些话语的转录。假设长度分别为 2 和 3。标签批形状将为 [2, 3, 26],其中批大小为 2,最大长度为 3,英文字符数为 26(单热编码)。

型号为:

损失函数类似于:

我的问题是如何获得 logit_length 和 label_length。我会假设 logit_length 是在掩码中编码的,但是如果我执行 y_pred._keras_mask,则结果为 None。对于 label_length,信息在张量本身中,但我不确定获取它的最有效方式。

谢谢。

更新:

按照Tou You的回答,我使用tf.math.count_nonzero来获取label_length,并将logit_length设置为logit层的长度。

所以损失函数内部的形状是(batch size = 10):

当然 y_true 和 y_pred 的 'None' 是不一样的,因为一个是批次的最大字符串长度,另一个是批次的最大时间帧数。但是,当我使用这些参数调用 model.fit() 和 loss tf.keras.backend.ctc_batch_cost() 时,我收到错误:

看起来它在抱怨 y_true (92) 的长度与 y_pred (876) 的长度不同,我认为这不应该。我错过了什么?

0 投票
1 回答
73 浏览

avr - 如何在 AVR CTC 模式下设置比较值

我正在尝试学习如何使用CTC模式,AVR并试图弄清楚为什么在设置比较值时应该减 1。例如,现在我正在发送AVR每 200 毫秒的工作时间,通过计算我发现该值应该是 50000,但是在有关该程序的视频中,该人声称它应该是 50000-1,这是为什么?

0 投票
1 回答
121 浏览

python - 如何获得 LPRNet 的置信度分数?

我是一个在 openvino 工具包提供的 LPRNet 上工作的新手: https ://github.com/openvinotoolkit/training_extensions

我想得到预测结果的概率,但似乎tf.nn.ctc_greedy_decoder只有返回neg_sum_logits,我不确定如何将其转换为概率。

有谁知道我怎么能得到那个?任何建议将不胜感激!谢谢。

0 投票
1 回答
129 浏览

python - keras 中的 CTC 损失实现

我正在尝试使用 keras 为我的简化神经网络实现 CTC 损失:

我们有 (3800,4) 维度的 y_true (或 y_train),因为我把 label_length=4 和 input_length=5 (空白+1)

我面临这个错误:

y_true 是这样的:

我的问题是什么?

0 投票
1 回答
75 浏览

python - 尝试预测音频时出错:无法计算输出张量(“ctc/ExpandDims_22:0”

所以我尝试使用 librispeech 数据集 dev-clean 创建一个语音识别神经网络。我试图将https://github.com/soheil-mpg/Speech-Recognition中的代码转换为 jupyter notebook。

一切似乎都在工作。该模型可以训练并且不会给出任何错误。但是当使用 model.predict() 我得到以下错误:

AssertionError: Could not compute output Tensor("ctc/ExpandDims_22:0", shape=(None, 1), dtype=float32)

我将 Jupyter Notebook 上传到https://github.com/jake-salmone/ASR

代码几乎相同,我唯一改变的是,我不使用 json,而是使用 pandas DataFrame。

0 投票
0 回答
63 浏览

python - CTC 损失计算不正确

Python的输入:

Python的输出:

Mathematica 的输入:

Mathematica 的输出:

由于我的序列是[0,1]并且它是一种热编码(当字符数为 2 + 1(对于 CTC)时)是[[1,0,0],[0,1,0]]- 不nn.ctc_loss应该0吗?和数学一样?谢谢!

0 投票
2 回答
314 浏览

tensorflow - 机器学习 CTC 损失日志概率

我有一个训练有素的CRNN模型,应该可以识别图像中的文本。它确实有效,到目前为止还不错。

我的输出是一个 CTC 损失层,我使用返回的 tensorflow 函数对其进行解码keras.backend.ctc_decode,如文档所述(https://code.i-harness.com/en/docs/tensorflow~python/tf/keras/backend/ctc_decode ),aTuple是解码结果,aTensor是预测的对数概率。

通过对模型进行一些测试,我得到了以下结果:

预测总是正确的。然而,我认为它的可能性似乎不是我所期望的。它们看起来完全是随机数,甚至比 1 或 2 还要大!我究竟做错了什么??