[英]crash in ctc loss function
我在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))
先感謝您。
我一直面臨着這個問題:錯誤意味着
這就是它開始從指數[7]崩潰的原因,因為它的第一維的值是7,大於6。
此外,我認為問題是由於幀數(時間步長維度)的值小於發送到ctc_loss函數的target_labels的數量而引起的。
嘗試使幀數/時間步數> target_labels的數量,你的代碼肯定會工作!
我想進一步幫助,請你給我一個你的代碼鏈接。
似乎ctc.loss( https://www.tensorflow.org/api_docs/python/tf/nn/ctc_loss )忽略了該選項: ignore_longer_outputs_than_inputs=True
。 它不是忽略比輸入序列更長的輸出,而是重新生成這個InvalidArgumentError
(似乎我沒有正確檢查我的序列的長度)。
因此,解決方案是預處理數據集,並確保輸入到ctc_loss的所有序列都具有比輸入更多的目標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.