2017-05-24 31 views
20

私は、次のような状況でKerasのデフォルトの動作をどのように解釈するかわからない午前:Kerasはマルチラベル分類をどのように扱いますか?

マイY(グランドトゥルース)はscikit学習のMultilabelBinarizer()を使用して設定されました。

したがって、ランダムな例を与えるために、私のy列の1つの行は、 [0,0,0,1,0,1,0,0,0,0,1]のようにワンホットエンコードされています。

私は予測できるクラスが11個あり、複数のクラスが真実かもしれません。したがって、問題のマルチラベルの性質。この特定のサンプルには3つのラベルがあります。

私は非マルチラベル問題(通常のビジネス)と同じようにモデルをトレーニングしますが、エラーは発生しません。それは私のy_trainに遭遇し、y_trainの各行に複数の「1」が存在する意味、それは「マルチ」ワンホットエンコードされていることを見ているとき

from keras.models import Sequential 
from keras.layers import Dense, Dropout, Activation 
from keras.optimizers import SGD 

model = Sequential() 
model.add(Dense(5000, activation='relu', input_dim=X_train.shape[1])) 
model.add(Dropout(0.1)) 
model.add(Dense(600, activation='relu')) 
model.add(Dropout(0.1)) 
model.add(Dense(y_train.shape[1], activation='softmax')) 

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True) 
model.compile(loss='categorical_crossentropy', 
       optimizer=sgd, 
       metrics=['accuracy',]) 

model.fit(X_train, y_train,epochs=5,batch_size=2000) 

score = model.evaluate(X_test, y_test, batch_size=2000) 
score 

はKerasは何をしますか?基本的に、Kerasはマルチラベル分類を自動的に実行しますか?スコアメトリックの解釈の違いは何ですか?

答えて

29

短く

softmaxを使用しないでください。

出力レイヤのアクティブ化にはsigmoidを使用してください。

損失機能にはbinary_crossentropyを使用してください。

predictを評価に使用してください。

softmax

つのラベルのためのスコアの増加、他のすべてが低下しているのはなぜ(これは確率分布です)。複数のラベルがあるときは、その必要はありません。

完全なコード

from keras.models import Sequential 
from keras.layers import Dense, Dropout, Activation 
from keras.optimizers import SGD 

model = Sequential() 
model.add(Dense(5000, activation='relu', input_dim=X_train.shape[1])) 
model.add(Dropout(0.1)) 
model.add(Dense(600, activation='relu')) 
model.add(Dropout(0.1)) 
model.add(Dense(y_train.shape[1], activation='sigmoid')) 

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True) 
model.compile(loss='binary_crossentropy', 
       optimizer=sgd) 

model.fit(X_train, y_train, epochs=5, batch_size=2000) 

preds = model.predict(X_test) 
preds[preds>=0.5] = 1 
preds[preds<0.5] = 0 
# score = compare preds and y_test 
+1

おかげで、あなたは多くのバイナリ分類問題に私のマルチラベル問題を分解するために言っていますか? Kerasは私にマルチラベル分類タスクを与えていることをどのように知っていますか? – user798719

+1

はい、そうです。 Kerasは本当に知っている必要はありません。 'sigmoid'と' binary_crossentropy'を使うことで、ラベルは個別に改良されます。マルチラベルタスクの場合はそうですね。 – frankyjuang

+0

1つのクラスをどのように取得しますか? –

関連する問題