python - ctc损失函数崩溃

标签 python python-2.7 tensorflow

我在 Tensorflow 1.2.0-rc0 (python 2.7) 中使用 ctc-loss 函数得到以下 InvalidArgumentError:

InvalidArgumentError (see above for traceback): label SparseTensor is not valid: indices[7] = [0,7] is out of bounds: need 0 <= index < [1,7]
         [[Node: loss/CTCLoss = CTCLoss[ctc_merge_repeated=true, ignore_longer_outputs_than_inputs=false, preprocess_collapse_repeated=false, _device="/job:localhost/replica:0/task:0/cpu:0"](output_fc/BiasAdd/_91, _arg_labels/indices_0_1, _arg_labels/values_0_3, seq_len/Cast/_93)]]
         [[Node: loss/CTCLoss/_103 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/gpu:0", send_device="/job:localhost/replica:0/task:0/cpu:0", send_device_incarnation=1, tensor_name="edge_103_loss/CTCLoss", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/gpu:0"]()]]

我不明白:

label SparseTensor is not valid: indices[7] = [0,7] is out of bounds: need 0 <= index < [1,7]

由于崩溃的 SparseTensor(目标序列)是(我将批量大小设置为 1):

(array([[ 0,  0],
       [ 0,  1],
       [ 0,  2],
       [ 0,  3],
       [ 0,  4],
       [ 0,  5],
       [ 0,  6],
       [ 0,  7],
       [ 0,  8],
       [ 0,  9],
       [ 0, 10],
       [ 0, 11],
       [ 0, 12],
       [ 0, 13],
       [ 0, 14],
       [ 0, 15],
       [ 0, 16],
       [ 0, 17],
       [ 0, 18],
       [ 0, 19],
       [ 0, 20],
       [ 0, 21],
       [ 0, 22]], dtype=int32), array([41,  2,  7,  0, 13, 19,  4, 11, 11,  4, 40, 19,  8,  1,  1, 18, 40,
       24,  4,  0,  7, 40, 41], dtype=int32), array([ 1, 23], dtype=int32))

在之前的迭代中,它处理了具有相似值的较长序列,例如:

(array([[  0,   0],
       [  0,   1],
       [  0,   2],
       [  0,   3],
       [  0,   4],
       [  0,   5],
       [  0,   6],
       [  0,   7],
       [  0,   8],
       [  0,   9],
       [  0,  10],
       [  0,  11],
       [  0,  12],
       [  0,  13],
       [  0,  14],
       [  0,  15],
       [  0,  16],
       [  0,  17],
       [  0,  18],
       [  0,  19],
       [  0,  20],
       [  0,  21],
       [  0,  22],
       [  0,  23],
       [  0,  24],
       [  0,  25],
       [  0,  26],
       [  0,  27],
       [  0,  28],
       [  0,  29],
       [  0,  30],
       [  0,  31],
       [  0,  32],
       [  0,  33],
       [  0,  34],
       [  0,  35],
       [  0,  36],
       [  0,  37],
       [  0,  38],
       [  0,  39],
       [  0,  40],
       [  0,  41],
       [  0,  42],
       [  0,  43],
       [  0,  44],
       [  0,  45],
       [  0,  46],
       [  0,  47],
       [  0,  48],
       [  0,  49],
       [  0,  50],
       [  0,  51],
       [  0,  52],
       [  0,  53],
       [  0,  54],
       [  0,  55],
       [  0,  56],
       [  0,  57],
       [  0,  58],
       [  0,  59],
       [  0,  60],
       [  0,  61],
       [  0,  62],
       [  0,  63],
       [  0,  64],
       [  0,  65],
       [  0,  66],
       [  0,  67],
       [  0,  68],
       [  0,  69],
       [  0,  70],
       [  0,  71],
       [  0,  72],
       [  0,  73],
       [  0,  74],
       [  0,  75],
       [  0,  76],
       [  0,  77],
       [  0,  78],
       [  0,  79],
       [  0,  80],
       [  0,  81],
       [  0,  82],
       [  0,  83],
       [  0,  84],
       [  0,  85],
       [  0,  86],
       [  0,  87],
       [  0,  88],
       [  0,  89],
       [  0,  90],
       [  0,  91],
       [  0,  92],
       [  0,  93],
       [  0,  94],
       [  0,  95],
       [  0,  96],
       [  0,  97],
       [  0,  98],
       [  0,  99],
       [  0, 100],
       [  0, 101],
       [  0, 102],
       [  0, 103],
       [  0, 104],
       [  0, 105],
       [  0, 106],
       [  0, 107],
       [  0, 108],
       [  0, 109],
       [  0, 110]], dtype=int32), array([41, 22,  4, 36, 17,  4, 40,  6, 14,  8, 13,  6, 40, 19, 14, 40,  4,
        0, 19, 40,  8, 19, 40, 22,  4, 36, 17,  4, 40,  6, 14,  8, 13,  6,
       40, 19, 14, 40, 14, 15,  4, 13, 40, 20, 15, 40, 18, 14, 12,  4, 40,
       22,  8, 13,  4, 40,  0, 13,  3, 40, 22,  4, 36, 17,  4, 40,  6, 14,
        8, 13,  6, 40, 19, 14, 40, 19,  4, 11, 11, 40, 24, 14, 20, 40, 18,
       19, 14, 17,  0,  6,  4, 40,  7, 14, 22, 40, 12, 20,  2,  7, 40,  8,
       19, 40,  2, 14, 18, 19, 18, 40, 41], dtype=int32), array([  1, 111], dtype=int32))

提前谢谢你。

最佳答案

我一直面临的问题: 该错误意味着

  • 您的第 0 个维度的值应小于 1,即只有 0 的值才有效。
  • 第一个维度的值应小于 7,即值只能介于 0 和 6 之间。

这就是为什么它从 indices[7] 开始崩溃的原因,因为它的第一个维度的值为 7,大于 6。

此外,我认为问题的产生是因为帧数(时间步长维度)的值小于发送到 ctc_loss 函数的 target_labels 的数量。

尝试使帧数/时间步数 > target_labels 数,您的代码应该绝对有效!

我想进一步提供帮助,请将您的代码链接发送给我。

关于python - ctc损失函数崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44359514/

相关文章:

Python 辅音/元音排列

python - 创建训练测试分割时出现"IndexError: too many indices for array"

python - 如何在 python 中插入地理引用数据?

python - Keras:无法访问 on_batch_end 回调内的训练图像

python - 替换 NaN 返回 ValueError : Array conditional must be same shape as self

Python - 如何一次读取文件一个字符?

python - 在导入之前/期间注入(inject)变量

python - 使用在该函数外部的函数中创建的列表,python

python - 这个错误意味着什么 : `y` argument is not supported when using python generator as input

tensorflow - tf.gradients() 或 optimizationr.compute_gradients() 获得的梯度是否已被取反?