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.