gpt4 book ai didi

tensorflow - 如何设计tensorflow的ctc loss layer的label

转载 作者:行者123 更新时间:2023-12-01 06:11:40 27 4
gpt4 key购买 nike

我刚开始在 tensorflow(r1.0) 中使用 ctc 损失层,对“标签”输入有点困惑

在tensorflow的API文档中是这样写的

labels: An int32 SparseTensor. labels.indices[i, :] == [b, t] means labels.values[i] stores the id for (batch b, time t). labels.values[i] must take on values in [0, num_labels)

  1. [b,t] 和 values[i] 是否意味着批处理中序列“b”的“t”处有一个标签“values[i]”?
  2. 它说值必须在[0,num_labels),但是对于稀疏张量,除了一些特定的地方几乎所有地方都是0,所以我真的不知道ctc的稀疏张量应该是什么样的
  3. 例如,如果我有一个手势的短视频,它有一个标签“1”,我应该将所有时间步长的输出标记为“1”,还是只将最后一个时间步长标记为“1”并且把其他当成“空白”?

谢谢!

最佳答案

解决您的问题:
1. 这里文档中的符号似乎有点误导,因为输出标签索引 t 不需要与输入时间片相同,它只是输出序列的索引。可以使用不同的字母,因为输入和输出序列未明确对齐。否则,您的断言似乎是正确的。下面我举个例子。

  1. 零是序列输出标签中的有效类。 TensorFlow 的 CTC 实现中所谓的空白标签是最后一个(最大的)类,它可能不应该出现在你的真实标签中。因此,如果您正在编写二进制序列分类器,您将拥有三个类别,0(比如“关闭”)、1(“打开”)和 2(CTC 的“空白”输出)。

  2. CTC Loss 用于用sequence 输出标记序列输入。如果你只有对于序列输入的单个类标签输出,您最好在 RNN 单元的最后一个时间步长的输出上使用 softmax 交叉熵损失。

如果您最终使用了 CTC 损失,您可以在这里通过阅读器了解我是如何构建训练序列的:How to generate/read sparse sequence labels for CTC loss within Tensorflow? .

例如,在我批处理两个具有标签序列的示例之后 [44, 45, 26, 45, 46, 44, 30, 44][5, 8, 17 , 4, 18, 19, 14, 17, 12],我通过评估(批处理的)SparseTensor 得到以下结果:

SparseTensorValue(indices=array([[0, 0],
[0, 1],
[0, 2],
[0, 3],
[0, 4],
[0, 5],
[0, 6],
[0, 7],
[1, 0],
[1, 1],
[1, 2],
[1, 3],
[1, 4],
[1, 5],
[1, 6],
[1, 7],
[1, 8]]), values=array([44, 45, 26, 45, 46, 44, 30, 44, 5, 8, 17, 4, 18, 19, 14, 17, 12], dtype=int32), dense_shape=array([2, 9]))

请注意稀疏张量值中索引的行如何对应于批号,而列如何对应于该特定标签的序列索引。这些值本身就是序列标签类。秩为 2,最后一个维度的大小(在本例中为 9)是最长序列的长度。

关于tensorflow - 如何设计tensorflow的ctc loss layer的label,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42488070/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com