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
- Ich bin mir nicht sicher, ob das die richtige für die Mehrklasseneinteilung ist
- 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')
python
neural-network
classification
clustering
keras
SpanishBoy
quelle
quelle
activation='softmax'
und kompilieren Sie die Auswahl vonloss='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.architecture
meistens von Schichten. Irgendwelche Ratschläge für meine Frage # 2?activation='sigmoid'
undloss='binary_crossentropy'
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)Antworten:
Ihre Auswahl
activation='softmax'
in der letzten Ebene und die Auswahl beim Kompilieren vonloss='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'
undloss='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.quelle