Quel est le meilleur modèle Keras pour la classification multi-classes?

30

Je travaille sur la recherche, là où le besoin de classer l' un des trois cas GAGNANT = ( 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

Mon modèle actuel est:

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. Je ne suis pas sûr que ce soit le bon pour la classification multi-classes
  2. Quelle est la meilleure configuration pour la classification binaire?

EDIT: # 2 - Comme ça?

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
la source
1
Voulez-vous dire "modèle", ou simplement faire référence au choix de la dernière couche activation='softmax'et au choix de compilation loss='categorical_crossentropy'? OMI, vos choix sont bons pour un modèle de prédire plusieurs classes mutuellement exclusives. Si vous voulez des conseils sur l'ensemble du modèle, c'est tout à fait différent, et vous devriez expliquer davantage vos préoccupations, sinon il y a trop à expliquer dans une seule réponse.
Neil Slater
Je veux parler architecturede couches principalement. Un conseil pour ma question # 2?
SpanishBoy
1
Il existe rarement une "bonne" façon de construire l'architecture, qui devrait être quelque chose que vous testez avec différents méta-paramètres, et devrait être axée sur les résultats (y compris toutes les limites que vous pourriez avoir sur l'utilisation des ressources pour le temps de formation / l'utilisation de la mémoire, etc.). Pour le # 2, vous pouvez soit simplement avoir deux sorties avec softmax similaires à maintenant, soit vous pouvez avoir une couche de sortie avec une sortie, activation='sigmoid'etloss='binary_crossentropy'
Neil Slater
activation='sigmoid'dans la couche de sortie . La couche cachée peut rester comme 'relu'vous le souhaitez (même si je commencerais probablement 'tanh'par ce problème, c'est une préférence personnelle avec très peu de soutien de la théorie)
Neil Slater

Réponses:

35

Vos choix activation='softmax'dans la dernière couche et votre choix de compilation loss='categorical_crossentropy'sont bons pour qu'un modèle prédit plusieurs classes mutuellement exclusives.

Concernant les choix plus généraux, il y a rarement une "bonne" façon de construire l'architecture. Au lieu de cela, cela devrait être quelque chose que vous testez avec différents méta-paramètres (tels que la taille des couches, le nombre de couches, la quantité d'abandon) et devrait être axé sur les résultats (y compris toutes les limites que vous pourriez avoir sur l'utilisation des ressources pour le temps de formation / la mémoire utiliser etc).

Utilisez un ensemble de validation croisée pour vous aider à choisir une architecture appropriée. Une fois cela fait, pour obtenir une mesure plus précise des performances générales de votre modèle, vous devez utiliser un ensemble de test séparé. Les données détenues de votre ensemble de formation séparément de l'ensemble de CV doivent être utilisées pour cela. Une répartition raisonnable peut être 60/20/20 train / cv / test, selon la quantité de données dont vous disposez et la quantité dont vous avez besoin pour déclarer un chiffre final précis.

Pour la question n ° 2, vous pouvez soit simplement avoir deux sorties avec une finale softmax similaire à maintenant, soit vous pouvez avoir une couche finale avec une sortie, activation='sigmoid'et loss='binary_crossentropy'.

Purement d'une intuition de ce qui pourrait fonctionner avec ces données, je suggérerais d'essayer avec 'tanh'ou d' 'sigmoid'activer dans la couche cachée, au lieu de 'relu', et je suggérerais également d'augmenter le nombre de neurones cachés (par exemple 100) et de réduire la quantité d'abandon ( par exemple 0,2). Mise en garde: le sentiment d'intestin sur l'architecture du réseau de neurones n'est pas scientifique. Essayez-le et testez-le.

Neil Slater
la source