2016-11-24 95 views
2

我正在准备用于手写识别目的的TensorFlow应用程序。我使用了一个简单的RNN模型,最后堆叠LSTM单元和CTC损耗。我对准备输入数据的标签有一些疑惑。在TensorFlow(python)中为CTC丢失准备目标标签

假设我有三个字符串作为目标标签,如​​,"ab""baccc"(在我的情况下,目标标签是单词而不是句子)。所以我有三个字符类别索引a:0, b:1, c:2, blank:3。据我了解目标标签的密集表示应该

0 3 1 3 2 0 0 0 
0 3 1 0 0 0 0 0 
1 3 0 2 3 2 3 2 

但作为TensorFlow需要这个标签的稀疏表示我需要准备的稀疏表示作为

indices[(0,0),(0,1),(0,2),(0,3),(0,4),(1,0),(1,1),(1,2),(2,0),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(2,7)] 
values[0,3,1,3,2,0,3,1,1,3,0,2,3,2,3,2] 
shape[3,8] 

我是正确的关于这个数据准备?任何帮助,高度赞赏。

回答

0

如果我正确地理解了这一点,那么您使用的批量大小为3,并将不同长度的目标放在一起。 对于四氯化碳的损失,我建议使用一批1号,因为四氯化碳似乎难以收敛在长序列上。

在密集表示中,您似乎用0填充较短的目标。那些应该是3代替(空格)。

最后,你构建的稀疏张量对我来说似乎是正确的。你有维度问题吗?你有错误日志显示吗?

+0

谢谢你的回答。这有很大的帮助。我肯定会使用批量大小1.但关于目标标签,我实际上并没有准备好密集矩阵。由于张量流需要我准备直接稀疏。现在如果TF用0填充它们(作为内部操作),我什么也做不了。我可以吗 ?但是,您的反馈很有用。 –