Was ist das beste Keras-Modell für die Klassifizierung mehrerer Klassen?

30

Ich arbeite an der Forschung, wo Bedarf zum Klassifizieren eines von drei Ereignisse WINNER = ( win, draw, lose)

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

Mein aktuelles Modell ist:

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. Ich bin mir nicht sicher, ob das die richtige für die Mehrklasseneinteilung ist
  2. Was ist das beste Setup für die binäre Klassifizierung?

EDIT: # 2 - Wie das?

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')
SpanishBoy
quelle
1
Meinen Sie "Modell" oder beziehen Sie sich nur auf die Auswahl der letzten Ebene activation='softmax'und kompilieren Sie die Auswahl von loss='categorical_crossentropy'? IMO, Ihre Auswahl ist gut für ein Modell, um mehrere sich gegenseitig ausschließende Klassen vorherzusagen. Wenn Sie sich für das gesamte Modell beraten lassen möchten, ist das ganz anders, und Sie sollten mehr über Ihre Bedenken erklären, ansonsten gibt es zu viel, um es in einer einzigen Antwort zu erklären.
Neil Slater
Ich meine architecturemeistens von Schichten. Irgendwelche Ratschläge für meine Frage # 2?
SpanishBoy
1
Es gibt selten einen "richtigen" Weg, die Architektur zu konstruieren. Dies sollte etwas sein, das Sie mit verschiedenen Metaparametern testen und das ergebnisorientiert sein sollte (einschließlich etwaiger Einschränkungen für die Ressourcennutzung für die Trainingszeit / Speichernutzung usw.). Für # 2 können Sie entweder nur zwei Ausgaben mit Softmax ähnlich wie jetzt haben, oder Sie können eine Ausgabeebene mit einer Ausgabe haben, activation='sigmoid'undloss='binary_crossentropy'
Neil Slater
activation='sigmoid'in der Ausgabeebene . Die verborgene Schicht kann bleiben, als 'relu'ob Sie möchten (obwohl ich wahrscheinlich 'tanh'für dieses Problem beginnen würde, das ist persönliche Präferenz mit sehr wenig Unterstützung von der Theorie)
Neil Slater

Antworten:

35

Ihre Auswahl activation='softmax'in der letzten Ebene und die Auswahl beim Kompilieren von loss='categorical_crossentropy'sind gut für ein Modell, um mehrere sich gegenseitig ausschließende Klassen vorherzusagen.

Was allgemeinere Entscheidungen betrifft, gibt es selten einen "richtigen" Weg, die Architektur zu konstruieren. Stattdessen sollten Sie dies mit verschiedenen Meta-Parametern testen (z. B. Ebenengröße, Anzahl der Ebenen, Anzahl der Drop-Outs) und ergebnisorientiert vorgehen (einschließlich etwaiger Einschränkungen der Ressourcennutzung für Trainingszeit / -speicher) verwenden etc).

Verwenden Sie ein Kreuzvalidierungsset, um eine geeignete Architektur auszuwählen. Um eine genauere Messung der allgemeinen Leistung Ihres Modells zu erhalten, sollten Sie einen separaten Testsatz verwenden. Hierfür sollten Daten verwendet werden, die von Ihrem Trainingssatz getrennt vom Lebenslaufsatz abgelegt wurden. Eine sinnvolle Aufteilung könnte 60/20/20 Zug / Lebenslauf / Test sein, abhängig davon, wie viele Daten Sie haben und wie viele Sie benötigen, um eine genaue endgültige Zahl zu melden.

Bei Frage 2 können Sie entweder nur zwei Ausgaben mit einem Softmax-Finale ähnlich wie jetzt haben, oder Sie können eine letzte Ebene mit einer Ausgabe haben, activation='sigmoid'und loss='binary_crossentropy'.

Rein aus dem Bauch heraus, was mit diesen Daten funktionieren könnte, würde ich vorschlagen, es mit 'tanh'oder 'sigmoid'Aktivierungen in der verborgenen Schicht zu versuchen , anstatt 'relu', und ich würde auch vorschlagen, die Anzahl der verborgenen Neuronen (z. B. 100) zu erhöhen und die Anzahl der Ausfälle zu reduzieren ( zB 0,2). Vorbehalt: Das Bauchgefühl bei der Architektur neuronaler Netze ist nicht wissenschaftlich. Probieren Sie es aus und testen Sie es.

Neil Slater
quelle