Qual è il miglior modello di Keras per la classificazione multi-classe?


30

Sto lavorando sulla ricerca, in cui necessità di una classificare dei WINNER tre eventi = ( 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

Il mio modello attuale è:

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. Non sono sicuro che sia quello corretto per la classificazione multi-classe
  2. Qual è la migliore configurazione per la classificazione binaria?

EDIT: # 2 - Come quello?

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
Intendi "modello", o semplicemente ti riferisci alla scelta dell'ultimo livello activation='softmax'e compila la scelta di loss='categorical_crossentropy'? IMO, le tue scelte per quelle sono buone per un modello per prevedere più classi reciprocamente esclusive. Se vuoi un consiglio sull'intero modello, questo è abbastanza diverso, e dovresti spiegare di più su quali sono le tue preoccupazioni, altrimenti c'è troppo da spiegare in una singola risposta.
Neil Slater,

Intendo per architecturelo più degli strati. Qualche consiglio per la mia domanda n. 2?
SpanishBoy,

1
Raramente esiste un modo "giusto" per costruire l'architettura, che dovrebbe essere qualcosa che testerai con diversi meta-parametri e dovrebbe essere guidato dai risultati (compresi eventuali limiti che potresti avere sull'uso delle risorse per il tempo di addestramento / uso della memoria, ecc.). Per il n. 2, puoi avere solo due output con softmax simili a quelli attuali, oppure puoi avere un layer di output con un output activation='sigmoid'eloss='binary_crossentropy'
Neil Slater

activation='sigmoid'nel livello di output . Il livello nascosto può rimanere come 'relu'piace a te (anche se probabilmente vorrei iniziare con 'tanh'questo problema, questa è la preferenza personale con pochissimo supporto dalla teoria)
Neil Slater

Risposte:


35

Le tue scelte activation='softmax'nell'ultimo livello e la scelta di compilazione loss='categorical_crossentropy'sono buone per un modello per prevedere più classi che si escludono a vicenda.

Per quanto riguarda le scelte più generali, raramente esiste un modo "giusto" per costruire l'architettura. Invece dovrebbe essere qualcosa che testerai con diversi meta-parametri (come dimensioni dei livelli, numero di livelli, quantità di abbandono) e dovrebbe essere guidato dai risultati (compresi eventuali limiti che potresti avere sull'uso delle risorse per il tempo / la memoria di addestramento usare ecc.).

Utilizzare un set di convalida incrociata per scegliere un'architettura adatta. Al termine, per ottenere una misurazione più accurata delle prestazioni generali del modello, è necessario utilizzare un set di test separato. A tale scopo, è necessario utilizzare i dati forniti dal set di allenamento separatamente dal set di CV. Una suddivisione ragionevole potrebbe essere 60/20/20 train / cv / test, a seconda della quantità di dati che hai e di quanto devi segnalare un dato finale accurato.

Per la domanda n. 2, puoi avere solo due output con un finale softmax simile a quello attuale, oppure puoi avere un layer finale con un output activation='sigmoid'e loss='binary_crossentropy'.

Puramente da un'idea di ciò che potrebbe funzionare con questi dati, suggerirei di provare 'tanh'o 'sigmoid'attivazioni nel livello nascosto, invece di 'relu', e suggerirei anche di aumentare il numero di neuroni nascosti (ad esempio 100) e ridurre la quantità di abbandono ( ad es. 0,2). Avvertenza: la sensazione viscerale sull'architettura della rete neurale non è scientifica. Provalo e provalo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.