Jer*_*yCC 2 tensorflow recurrent-neural-network
我刚开始在tensorflow(r1.0)中使用ctc loss layer并且与"标签"输入有点混淆
在tensorflow的API文档中,它说
labels:一个int32 SparseTensor.labels.indices [i,:] == [b,t]表示labels.values [i]存储(批处理b,时间t)的id.labels.values [i]必须采用[0,num_labels]中的值
谢谢!
小智 5
为了解决你的问题:
1.这里的文档中的符号似乎有点误导,因为输出标签索引t不需要与输入时间片相同,它只是输出序列的索引.可以使用不同的字母,因为输入和输出序列未明确对齐.否则,你的断言似乎是正确的.我举一个例子如下.
零是序列输出标签中的有效类.TensorFlow的CTC实现中所谓的空白标签是最后一个(最大的)类,无论如何都不应该在你的地面实况标签中.因此,如果您正在编写二进制序列分类器,则您将有三个类,0(表示"关闭"),1("打开")和2(CTC的"空白"输出).
CTC Loss用于标记序列输出的序列输入.如果序列输入只有一个类标签输出,那么最好在RNN单元的最后一个时间步的输出上使用softmax交叉熵损失.
如果您最终使用CTC丢失,您可以在此处看到我如何通过阅读器构建训练序列:如何在Tensorflow中生成/读取CTC丢失的稀疏序列标签?.
作为一个例子,后我批次两个例子具有标签序列[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]))
Run Code Online (Sandbox Code Playgroud)
注意稀疏张量值中的索引行如何对应于批号,列对应于该特定标签的序列索引.值本身是序列标签类.等级为2,最后一个维度的大小(在这种情况下为九)是最长序列的长度.
| 归档时间: |
|
| 查看次数: |
1000 次 |
| 最近记录: |