マルチクラス分類に最適なKerasモデルは何ですか?


30

私はどこの必要性3つのイベントWINNER =(の分類1に、研究に取り組んでいますwindrawlose

WINNER  LEAGUE  HOME    AWAY    MATCH_HOME  MATCH_DRAW  MATCH_AWAY  MATCH_U2_50 MATCH_O2_50
3         13    550      571          1.86        3.34        4.23       1.66     2.11
3         7     322     334           7.55         4.1         1.4       2.17     1.61

私の現在のモデルは:

def build_model(input_dim, output_classes):
    model = Sequential()
    model.add(Dense(input_dim=input_dim, output_dim=12, activation=relu))
    model.add(Dropout(0.5))
    model.add(Dense(output_dim=output_classes, activation='softmax'))
    model.compile(loss='categorical_crossentropy', optimizer='adadelta')
    return model
  1. それがマルチクラス分類に適しているかどうかわかりません
  2. バイナリ分類の最適な設定は何ですか?

編集:#2-そのような?

model.add(Dense(input_dim=input_dim, output_dim=12, activation='sigmoid'))
model.add(Dropout(0.5))
model.add(Dense(output_dim=output_classes, activation='softmax'))
model.compile(loss='binary_crossentropy', optimizer='adadelta')

1
「モデル」という意味ですか、それとも単に最後のレイヤーのactivation='softmax'選択とコンパイルの選択のことloss='categorical_crossentropy'ですか?IMO、それらの選択は、モデルが複数の相互に排他的なクラスを予測するのに適しています。モデル全体に​​関するアドバイスが必要な場合、それはまったく異なり、懸念事項について詳しく説明する必要があります。そうでない場合は、1つの答えで説明するのが多すぎます。
ニール・スレーター

私はarchitecture主に層について意味します。私の質問#2についてアドバイスはありますか?
スペイン語少年

1
アーキテクチャを構築する「正しい」方法はめったにありません。異なるメタパラメータでテストする必要があり、結果駆動型である必要があります(トレーニング時間/メモリ使用などのリソース使用に関する制限を含む)。#2の場合、現在と同様のソフトマックスを持つ2つの出力を使用するか、1つの出力を持つ出力レイヤーを使用することができます。activation='sigmoid'そして、loss='binary_crossentropy'
Neil Slater

activation='sigmoid'、出力層。隠されたレイヤーは'relu'、好きなようにとどまることができます(おそらく'tanh'、この問題から始めると思いますが、それは理論からほとんどサポートされない個人的な好みです)
ニールスレーター

回答:


35

選択肢activation='softmax'最後の層とのコンパイルの選択ではloss='categorical_crossentropy'、複数の相互排他的なクラスを予測するためのモデルに適しています。

より一般的な選択に関しては、アーキテクチャを構築する「正しい」方法はめったにありません。代わりに、異なるメタパラメーター(レイヤーサイズ、レイヤー数、ドロップアウトの量など)でテストする必要があり、結果駆動型である必要があります(トレーニング時間/メモリのリソース使用に関する制限を含む)使用など)。

交差検証セットを使用して、適切なアーキテクチャを選択します。完了したら、モデルの一般的なパフォーマンスをより正確に測定するには、別のテストセットを使用する必要があります。これには、CVセットとは別にトレーニングセットから出されたデータを使用する必要があります。合理的な分割は、保有するデータの量、および正確な最終数値を報告するのに必要な量に応じて、60/20/20 train / cv / testになります。

質問#2のために、あなたはどちらかだけで、今までと同様のソフトマックスファイナルで2つの出力を持つことができる、またはあなたが持つことができ、最終的な一つの出力を持つ層を、activation='sigmoid'loss='binary_crossentropy'

純粋にこのデータで動作するかもしれないものからの直感から、試してみる'tanh'か、'sigmoid'隠された層でアクティベーション、代わりに'relu'、私も(隠されたニューロン(例えば100)の数を増やすと、ドロップアウトの量を低減することを示唆しています例0.2)。警告:ニューラルネットワークアーキテクチャに関する直感は科学的ではありません。試して、テストしてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.