2017-03-14 98 views
0

我已經看到我們可以使用Dense(num_classes, ...)作爲輸出層,但我也看到Dense((num_classes-1), ...),特別是在談論二進制分類時。你使用哪個,爲什麼?Keras:多類分類密集層

回答

0

這是我的2美分,

我使用密集(num_classes),因爲我可以在該層的輸出計算SOFTMAX。

對於二元分類,我們通常使用交叉熵作爲損失函數。因此,我們只需要計算p(x = 1)和p(x = 0)就可以計算爲1 - p(x = 1)。

對於多類分類,將輸出大小減少1的唯一優點是減少參數個數,因爲我們可以計算p(x = k)= 1 - sum_ {i = 1}^K p(x = i),因爲K是數字類別。所以如果你打算不使用softmax而是使用不同的函數,也許你可以讓輸出層擁有(num_classes - 1)個單位。

+0

嗨@unaki,謝謝你的回覆。二元分類可以用一個輸出單元完成,因爲P(class 1)= 1 - P(class 0)。但正如你所說,線性依賴關係存在於多個類中。所以理論上你不應該需要'稠密(num_classes)' - 這應該是多餘的。 '密集(num_classes - 1)'應該就足夠了。爲什麼不呢? – StatsSorceress

+0

我明白了。在大多數情況下,我們希望對輸出層進行歸一化,使其總和爲1.一個常見函數是softmax。但是,像張量流這樣的框架,其softmax函數需要一個大小爲(num_classes)的向量。這就是爲什麼我們必須將維數保留爲類的數量。所以總而言之,我們這樣做是由於實施約束。 – unaki