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
- Je ne suis pas sûr que ce soit le bon pour la classification multi-classes
- 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')
python
neural-network
classification
clustering
keras
SpanishBoy
la source
la source
activation='softmax'
et au choix de compilationloss='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.architecture
de couches principalement. Un conseil pour ma question # 2?activation='sigmoid'
etloss='binary_crossentropy'
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)Réponses:
Vos choix
activation='softmax'
dans la dernière couche et votre choix de compilationloss='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'
etloss='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.la source