2017-01-17 40 views
3

對於每個輸入,我都有一個49x2的矩陣關聯。這裏是什麼1輸入輸出夫婦看起來像多輸出多級Keras型號

input : 
[Car1, Car2, Car3 ..., Car118] 

output : 
[[Label1 Label2] 
[Label1 Label2] 
     ... 
[Label1 Label2]] 

其中,Label1和Label2都是LabelEncode,他們分別有1200和1300個不同的類。

只是爲了確保這是我們所說的多輸出多類問題?

我試圖壓扁輸出,但我擔心模型不會理解所有類似的標籤共享相同的類。

是否有Keras層處理輸出這個特殊的數組形狀?

回答

2

通常,多類問題對應於輸出類集合上的概率分佈的模型(通常通過交叉熵針對實際類別的單熱編碼進行評分)。現在,無論您是將其構建爲單個輸出,還是兩個輸出(49個輸出或49 x 2 = 98個輸出),這意味着具有1,200 x 49 + 1,300 x 49 = 122,500個輸出單位 - 這不是計算機無法實現的功能處理,但也許不是最方便的東西。你可以嘗試讓每個類的輸出都是一個單一的(例如線性的)單位,並且它是選擇標籤的價值,但是,除非標籤具有一些數字含義(例如訂單,尺寸等),否則它不可能工作。

如果輸入中元素的順序有一定意義(即洗牌會影響輸出),我想我會通過RNN來處理問題,如LSTM或雙向LSTM模型,兩個輸出。對輸出使用return_sequences=TrueTimeDistributedDense softmax圖層,對於每個118長的輸入,您將有118對輸出;那麼你可以使用時間樣本權重下降,例如,第一個69(或者可以做一些事情,比如,如果你使用雙向模型,先丟棄35,然後再丟棄34),然後用剩餘的49對labellings。或者,如果這對你的數據有意義(也許它沒有),你可以去更高級的東西,比如CTC(儘管Keras沒有它,我試圖將TensorFlow implementation整合到它中,但沒有太多成功),這是also implemented in Keras(謝謝@indraforyou)!

如果輸入中的順序沒有意義,但輸出的順序確實如此,那麼您可以有一個RNN,其中輸入是原始的118長度矢量加上一對標籤(每個單獨編碼),輸出又是一對標籤(同樣是兩個softmax層)。這個想法將會是你在每一幀上得到一個「行」的49x2輸出,然後你將它與初始輸入一起反饋給網絡以獲得下一個;在訓練時間,您可以將輸入重複49次以及「前一個」標籤(第一個標籤爲空標籤)。

如果沒有順序關係要利用(即輸入順序和輸出順序沒有特殊意義),那麼問題只能由最初的122,500個輸出單元(加上所有隱藏單元你可能需要得到那些)。你也可以嘗試在普通網絡和RNN之間的某種中間地帶,在這裏你有兩個softmax輸出,並且隨着118長的矢量,你包含你想要的輸出的「id」(例如作爲49 - 長的一個熱點編碼矢量);如果49個輸出中每個輸出的每個標籤的「含義」是相似的或可比較的,則它可能起作用。

+1

有Keras的例子使用CTC丟失..檢查https://github.com/fchollet/keras/blob/master/examples/image_ocr.py .. tensorflow和theano都支持 – indraforyou

+0

@indraforyou WAAAT Keras * does * have CTC?我想我讀了一些它沒有的地方(可能是關於一些舊版本),甚至沒有正確檢查......對我感到羞恥! :S非常感謝你提及它。 – jdehesa

+0

謝謝!我的每個輸出集都有一個內部層次結構。我的下一個里程碑是在每個輸出集合中實現可變數量的行,這將使得這是一個可變的多輸出多類問題。你認爲RNNs LSTM也可以處理這個任務嗎? –