2017-04-03 31 views
0

我有以下格式的培訓檔案:如何在具有張量流的卷積神經網絡中執行多類分類?

0.086,0.4343,0.4212,...,class1的

0.086,0.4343,0.4212,...,Class2中

0.086,0.4343,0.4212,...,class5

其中,每行是一維向量,最後一列是該向量表示的類。我們可以看到一個向量重複幾次,因爲它有幾個類。

讀取此數據由python「Panda」庫完成。也就是說,我需要用卷積網絡進行訓練。我已經研究了一些網站,並沒有獲得太多的成功,也不知道網絡是否需要爲「多類」形式做好準備。

我想知道是否有人知道張量流的多類一維分類方法或可以指導我一個例子,因爲在訓練網絡後,我需要傳遞一個模板(這將是一個向量)和網絡輸出我給每個班的正確百分比。

謝謝!

回答

1

這是一個非常簡單的設置。

首先要知道的是:您的標籤需要採用「一種熱門編碼」格式。這意味着,如果您有5個類,則類1由向量[1,0,0,0,0]表示,類2由向量[0,1,0,0,0]表示,依此類推。這是標準。

其次,你提到你想要多類分類。但是你給出的例子是單類分類。所以這可能是一個術語澄清。當你說多類分類時,它意味着你想要一個樣本屬於多個類,假設你的第一個樣本是類2和類3的一部分。但在你的情況下它看起來不是這樣。因此,對於具有5個班級的單班分類,您希望使用交叉熵作爲您的損失函數。

您可以按照cifar 10教程。這是相同的設置,每個圖像是10個類中的一個。

https://www.tensorflow.org/tutorials/deep_cnn

你提到你的數據是一維的。這是微不足道的,只要把它當作cifar 10二維數據,其中一個維度設置爲1.您不需要更改任何其他代碼。在cifar 10示例中,您的圖像將是32x32,在您的數據中,您的圖像可能是32x1或10x1,無論您決定使用哪種內核(嘗試不同的內核大小!)。同樣的改變將適用於步幅。只要把你的問題看成是一個二維問題,並且二維平坦,就像餡餅一樣容易。

+0

感謝您的回答!但我仍然相信我的方法是多類,因爲在我提到的例子中,我爲3個不同的類放置了一個相同的向量。那麼deep_cnn網絡將​​會達到我的目的嗎?謝謝! –

+0

啊,你說這些是一個樣本?那麼你的標籤向量應該看起來像'[1,1,0,0,1]'表示類1,2,5。你的損失函數應該是sigmoid交叉熵,而logits仍然可能是他們正在使用的。不要使用softmax。 Softmax輸出一個概率分佈,一個簡單的S形只是將所有的值縮放到0 ... 1的比例,那麼對於任何一個類來說,一個類的邊界> 0.5是正的,否則是負的。這裏有一個有用的討論:http://stackoverflow.com/questions/34240703/difference-between-tensorflow-tf-nn-softmax-and-tf-nn-softmax-cross-entropy-with –

+0

在這種情況下生成一個預測在這個例子中輸出爲5的輸出層並將其舍入到{0,1},這將是您的預測結果。張量流中的損失函數應該饋送未縮放的值,例如,在將這些值傳遞給'tf.sigmoid_cross_entropy_with_logits(...)'之前,不要在輸出層上應用sigmoid。該損失函數適用於您的S形。但請注意,您需要應用sigmoid並將其四捨五入以生成另一張張,用於實際返回結果(在訓練期間不需要,僅在需要進行預測時)。 –

0

從我的理解你有一個多標籤問題。這意味着一個樣本可以屬於多個類別

看看sigmoid_cross_entropy_with_logits並將其用作您的損失函數。

您不需要使用一個熱門編碼或重複您的樣本爲他們屬於這個損失函數的每個標籤。只需使用一個標籤向量並將其設置爲樣本所屬的類。