问题标签 [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 投票
2 回答
14013 浏览

tensorflow - 使用 Tensorflow 的 Connectionist 时间分类 (CTC) 实现

我试图在 contrib 包(tf.contrib.ctc.ctc_loss)下使用 Tensorflow 的 CTC 实现,但没有成功。

  • 首先,有人知道我在哪里可以阅读一个好的分步教程吗?Tensorflow 的文档在这个主题上很差。
  • 我是否必须向 ctc_loss 提供带有交错空白标签的标签?
  • 即使使用长度为 1 的训练数据集超过 200 个 epoch,我也无法过度拟合我的网络。:(
  • 如何使用 tf.edit_distance 计算标签错误率?

这是我的代码:

谢谢!

更新(2016 年 6 月 29 日)

谢谢你,@jihyeon-seo!所以,我们在 RNN 的输入上有类似 [num_batch, max_time_step, num_features] 的东西。我们使用 dynamic_rnn 执行给定输入的循环计算,输出一个形状为 [num_batch, max_time_step, num_hidden] 的张量。之后,我们需要在每个 tilmestep 中使用权重共享进行仿射投影,因此我们必须重塑为 [num_batch*max_time_step, num_hidden],乘以形状为 [num_hidden, num_classes] 的权重矩阵,求和偏置撤消reshape, transpose(所以我们将有 [max_time_steps, num_batch, num_classes] 用于 ctc loss 输入),这个结果将作为 ctc_loss 函数的输入。我做的一切正确吗?

这是代码:

更新(2016 年 7 月 11 日)

谢谢@Xiv。这是修复错误后的代码:

更新 (07/25/16)

我在 GitHub 上发布了我的部分代码,只使用了一个语句。随意使用!:)

0 投票
1 回答
3541 浏览

tensorflow - 联结主义时间分类 (CTC) 空白标签

我正在尝试在我的网络中使用 CTC 损失函数,但不太了解何时将“空白”标签作为标签提供。

我在Molchanov描述的手势识别中使用它,但是让我感到困惑的是还有一个“没有手势”。

在 tensorflow 文档中,描述为

输入 Tensor 的最内层维度大小 num_classes 表示 num_labels + 1 个类,其中 num_labels 是真实标签的数量,最大值(num_classes - 1)保留给空白标签。

如果我现在使用“空白”标签来表示没有手势,我的训练受到限制,因为错误

在空标签后面看到一个非空标签(索引 >= num_classes - 1)

我假设空标签与空白标签相同。

问题是,当我想提供以无手势开始(映射到空标签)然后有手势的数据时,我得到了这个错误。我可以通过在现有标签旁边添加两个标签来避免它,一个用于“无手势”,一个用于“空白标签/空标签”。然后我只输入“无手势”标签,但从不输入“空白”标签,但这似乎不太正确。

所以我的问题是,我应该使用“空白/空”标签做什么?

我可以想象在语言处理中,您通常会使用句尾点作为“空”标签吗?但是没有结束手势,因为它是一个连续的流。

谢谢

0 投票
0 回答
2980 浏览

python - keras 的 CTC 损失

如何在keras中使用tensorflows CTC损失函数?

我试过这样做:

使用的模型是:

但我不断收到错误消息:

我怎样才能解决这个问题?如何将输出张量转换为稀疏?

0 投票
1 回答
1046 浏览

python - 了解 CTC 的 TF 实现是如何工作的

我试图了解 CTC 实现在 TensorFlow 中的工作原理。我写了一个简单的例子来测试 CTC 功能,但出于某种原因,我inf对一些目标/输入值感到很困惑,我确定为什么会这样!?

代码:

样本输出:

知道我在那里想念什么!?

0 投票
1 回答
787 浏览

python - CTC模型不学习

我正在尝试使用连接主义时间分类为音频转录编写 Keras 模型。使用主要工作的逐帧分类模型和OCR 示例,我想出了下面给出的模型,我想训练该模型将德语句子的短时傅里叶变换映射到它们的音标。

我的训练数据实际上确实有时间信息,所以我可以用它来训练没有 CTC 的逐帧模型。没有 CTC 损失的逐帧预测模型运行良好(训练准确率 80%,验证准确率 50%)。然而,在没有时间信息的情况下,还有更多潜在的训练数据可用,所以我真的很想换一个 CTC。为了测试这一点,我从数据中删除了时间,将 NULL 类的输出大小增加了一倍,并添加了 CTC 损失函数。

这个 CTC 模型似乎没有学习。总体而言,损失并没有下降(在每个 80 个句子的十几个 epoch 中,它从 2000 下降到 180,但随后又回升至 430),并且它产生的最大似然输出在[nh每个句子周围都有所下降,这通常有大约六个单词和转录,例如[foːɐmʔɛsndʰaɪnəhɛndəvaʃn]-[]是序列的一部分,代表音频开始和结束时的停顿。

我发现在 Keras 中找到对 CTC 的好的解释有点困难,所以可能是我做了一些愚蠢的事情。我是否弄乱了模型,在某处混淆了参数的顺序?在给模型完整的句子之前,我是否需要更加小心地训练模型,从带有一个、两个或三个声音的音频片段开始?简而言之,

我如何让这个 CTC 模型学习?

ctc_lambda_function从预测中生成序列的代码来自 OCR 示例。

0 投票
0 回答
302 浏览

keras - CTCBeamSearchDecoder 认为形状 (2,) 的 sequence_length 不是向量

尝试在 Keras 模型中运行光束搜索时,我会收到令人困惑(和冲突?)的错误消息。我的模型有输入,例如

CTC 损失函数需要[1]输入和标签长度的形状。据我了解,应该通过类似的方式获得输出

但按原样,这会导致对形状的抱怨input_length

但如果我砍掉那个维度

模型定义运行,但是当我运行y = paths([x, numpy.array([[30], [30]])])x.shape == (2, 30, 513)我突然得到

我究竟做错了什么?

0 投票
1 回答
674 浏览

ocr - RNN/LSTM 可以用于非标准文本 OCR 吗?

我读过 LSTM 和 RNN,甚至 CTC。据我了解,RNN 用于计算序列中缺失的标记(例如,句子中的单词)。但是,我的问题是阅读用草书书写的人名。很多名字不受欢迎,无法在语言模型中找到,所以如果 RNN 只是预测缺失的单词,它不会成功,因为我没有可能的人名的完整数据集,对吧?

1)我可以使用RNN来识别非标准词吗?(例如罕见/不受欢迎的人名)

2)如果没有,是否有任何其他替代。? 或者我必须使用传统的 OCR 方法(尝试分割然后分类字符)?

0 投票
1 回答
84 浏览

tensorflow - 如何将 SparseToDense 转换为 Tensor 或 int 数组?

我已经在 android 设备中实现了 LSTM-CTC 模型并来到了这个代码块。

我得到了具有预期形状的 sparseDense 对象,但我不知道如何从中获取浮点数组。

如果有人知道,请回复...

谢谢。

0 投票
1 回答
1250 浏览

speech-recognition - CTC:空格和空白有什么区别?

在 2006 年关于连接主义时间分类的文章中,Alex Graves & co。介绍了一种解码语音的模型,有27个标签:26 个用于字母,一个用于空白,表示没有标签(我理解为静音)。

但是,我看到很多使用28个标签的 CTC 实现,一个是空白,另一个是空格。到目前为止,我还没有找到需要使用这两个标签的解释,对我来说,它们代表的是同一件事。

您能否解释一下 CTC 上下文中空白和空格之间的区别以及为什么需要这两个标签?

0 投票
0 回答
90 浏览

machine-learning - 将多个模型的输出与 CTC 输出层相结合(集成)

我试图结合不同模型的结果来给出更好的结果(比如在分类中投票)。

我的模型的输出来自 ctc 层,这是时间戳的输出类的概率分布。它有 2d 输出 (TXP) T 是输出类的时间戳和 P 概率分布。

简单平均不起作用,因为不同模型的对齐存在一些问题,即。对于两个模型,输出可以是 _ _ b _ _ 和 b _ _ _ _。

有没有更好的方法将不同模型的输出与 ctc loss 结合起来?