姓名:崔少杰 ? ? ? 學(xué)號:16040510021
轉(zhuǎn)載自:http://www.reibang.com/p/4fadf629895b=有修改
【嵌牛導(dǎo)讀】:CTC是序列標(biāo)志的一個重要算法,它主要解決了label對齊的問題
【嵌牛鼻子】:OCR芋忿、CTC
【嵌牛提問】:LSTM+CTC的實現(xiàn)有什么不一樣的功能决采?
【嵌牛正文】:假設(shè)我們要解決的是4位數(shù)字的識別氛悬,圖片是80*30的圖片见剩。那么我們就將每張圖片按列切分成80個30維的向量墩剖。然后作為一個lstm的80個輸入减宣。一個lstm的輸出和輸入數(shù)目應(yīng)該是相同的萝招。而我們的預(yù)測目標(biāo)卻只有4個數(shù)字反症。而不是80個數(shù)字。在沒有用ctc時我想了兩個解決方案畔派。第一個是用encode-decode模式铅碍。也就是80個輸入做encode,然后decode成4個輸出线椰。實測效果很挫胞谈。第二個是把4個label每個copy20遍,從而變成80個label憨愉。實測也很挫烦绳。沒辦法,最后只能用ctc loss了配紫。
用ctc loss的體會就是径密,如果input的長度遠(yuǎn)遠(yuǎn)大于label的長度,比如我這里是80和4的關(guān)系躺孝。那么一開始的收斂會比較慢睹晒。在其中有一段時間cost幾乎不變。此刻一定要有耐心括细,最終一定會收斂的伪很。在ocr識別的這個例子上最終可以收斂到95%的精度。
ctcStatus_t compute_ctc_loss(const float* const activations,
float* gradients,
const int* const flat_labels,
const int* const label_lengths,
const int* const input_lengths,
int alphabet_size,
int minibatch,
float *costs,
void *workspace,
ctcComputeInfo info);