2017-06-04 127 views
2

我收到的Tensorflow 1.2.0-RC0使用CTC-損失函數以下InvalidArgumentError(Python 2.7版)的:崩潰CTC損失函數

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(靶序列),其崩潰是(I設定爲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

似乎ctc.loss(https://www.tensorflow.org/api_docs/python/tf/nn/ctc_loss)忽略了選項:ignore_longer_outputs_than_inputs=True。而不是忽略比輸入序列更長的輸出,它只是恢復這個InvalidArgumentError(似乎我沒有正確檢查我的序列的長度)。

因此,解決方案是預處理您的數據集,並確保您輸入到ctc_loss的所有序列具有比輸入更多的目標。

0

我一直面臨的問題: 錯誤意味着

  • 你的第0尺寸應當具有大於1個的值,即值以下僅0可以工作。
  • 的第一尺寸應具有的值小於7個,即值可位於僅在0和6

這就是爲什麼它開始從索引崩潰[7],因爲它的第一維度的值是7,其大於6.

此外,我想問題是由於幀的數量(時間步長)有一個小於被髮送到ctc_loss函數的target_labels的數量而引起的。

嘗試製作幀數/時間步數> target_labels的數量,您的代碼應該可以工作!

我想進一步幫助,請你給我一個你的代碼鏈接。

+0

謝謝!我做了一些更多的研究,看來問題出現了,因爲TF忽略了'ignore_longer_outputs_than_inputs'選項(我之前設置爲「True」)。 –