2

我需要幫助來構建分類的keras模型。 我有Keras分類模型

輸入:光譜的167點

輸出11類調查物質。

但是在一個數據集中可以是含有多種物質的物質的幽靈(例如包含2,3,4類)。 我試過使用categorical_crossentropy,但它僅適用於非相交類。

KerasDoc

注:使用categorical_crossentropy損失的時候,你的目標應該是明確的格式(例如,如果你有10個班,每個樣品的目標應該是10維向量這是所有 - 樣本期望對應於樣本類別的指數爲1)。爲了整數目標轉化爲分類目標,您可以使用Keras實用to_categorical:

我的代碼:

model = Sequential() 
model.add(Dense(64, input_dim=167)) 
model.add(Dense(32)) 
model.add(Dense(11)) 
model.add(Activation('sigmoid')) 
model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy']) 

我嘗試過很多車型,但不能得到一個好的結果。

回答

1

你或許應該sigmoidbinary_crossentropySee here

PS順利:這是不是你的情況,但對於categorial_crossentropy,您應使用softmax激活。 softmax輸出經過優化的東西,只能最大化一個類。

(如果有人想用一個好或更好的「優化器」來補充這個答案,請隨意)。

+0

我試圖使用binary_crossentropy但在每一個配合行動,如果隨機幽靈檢查,我得到的預測[0.23598771 0.24065545 0.20274314 0.20727901 0.21786793 0.20546967 0.24399549 0.23881513 0.22483987 0.24453731 0.2304628]但有效的是[0,0,0,1,0,0,1 ,0,1,1,0]。我無法得到任何真相般的結果。 – Mogost

+0

你期望從「隨機幽靈」中獲得真正的價值嗎?如果在擬合方法中使用'verbose = 1'(或2),則可以看到模型的「損失」正在減小。另外,您可以使用'epochs = someNumber'多次重複訓練。如果損失減少,模型訓練正常,否則會出現問題。我認爲167個數據樣本對於您的模型來說太少了,無法正確地學習。我建議某種數據增強,比如用你知道的不同物質的不同組合來創建複合(而不是隨機)幽靈。 –

+0

對於小數據樣本,您必須牢記一件事:您可以製作模型訓練並正確預測它們,但如果它們太少,您的建模就有機會記住它們而不是理解它們(它被稱爲overfittin )。如果模型過度擬合,訓練數據看起來很好,但訓練數據中不包含的數據不會有好的結果。 –