¿Cuál es el mejor modelo de Keras para la clasificación de varias clases?

30

Estoy trabajando en la investigación, en la necesidad de una GANADOR clasificar de tres eventos = ( 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

Mi modelo actual es:

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. No estoy seguro de que sea la correcta para la clasificación de varias clases
  2. ¿Cuál es la mejor configuración para la clasificación binaria?

EDITAR: # 2 - ¿Te gusta eso?

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
fuente
1
¿Te refieres a "modelo", o simplemente te refieres a la elección de la última capa activation='softmax'y la elección de compilación de loss='categorical_crossentropy'? En mi opinión, sus opciones son buenas para que un modelo prediga múltiples clases mutuamente excluyentes. Si desea asesoramiento sobre el modelo completo, eso es bastante diferente, y debe explicar más sobre cuáles son sus preocupaciones, de lo contrario, hay demasiado para explicar en una sola respuesta.
Neil Slater
Me refiero a las architecturecapas en su mayoría. ¿Algún consejo para mi pregunta # 2?
SpanishBoy
1
Rara vez hay una forma "correcta" de construir la arquitectura, que debería ser algo que se pruebe con diferentes metaparámetros, y debe estar basada en los resultados (incluidos los límites que pueda tener en el uso de recursos para el tiempo de entrenamiento / uso de la memoria, etc.). Para el n. ° 2, puede tener dos salidas con softmax similar a ahora, o puede tener una capa de salida con una salida activation='sigmoid'yloss='binary_crossentropy'
Neil Slater
activation='sigmoid'en la capa de salida . La capa oculta puede permanecer como 'relu'lo desee (aunque probablemente comenzaría con 'tanh'este problema, esa es una preferencia personal con muy poco apoyo de la teoría)
Neil Slater

Respuestas:

35

Sus elecciones activation='softmax'en la última capa y la opción de compilación de loss='categorical_crossentropy'son buenas para que un modelo prediga múltiples clases mutuamente excluyentes.

En cuanto a las elecciones más generales, rara vez hay una forma "correcta" de construir la arquitectura. En cambio, eso debería ser algo que pruebe con diferentes metaparámetros (como tamaños de capa, número de capas, cantidad de abandono), y debería basarse en los resultados (incluidos los límites que pueda tener en el uso de recursos para el tiempo / memoria del entrenamiento) uso, etc.)

Utilice un conjunto de validación cruzada para ayudar a elegir una arquitectura adecuada. Una vez hecho esto, para obtener una medida más precisa del rendimiento general de su modelo, debe usar un conjunto de prueba separado. Para ello, se deben utilizar los datos que se conservan de su conjunto de entrenamiento por separado del conjunto de CV. Una división razonable podría ser 60/20/20 train / cv / test, según la cantidad de datos que tenga y la cantidad que necesita para informar una cifra final precisa.

Para la Pregunta # 2, puede tener dos salidas con un final softmax similar a ahora, o puede tener una capa final con una salida, activation='sigmoid'y loss='binary_crossentropy'.

Simplemente por una intuición de lo que podría funcionar con estos datos, sugeriría probar con 'tanh'o 'sigmoid'activaciones en la capa oculta, en lugar de 'relu', y también sugeriría aumentar el número de neuronas ocultas (por ejemplo, 100) y reducir la cantidad de abandono ( por ejemplo, 0.2). Advertencia: la sensación de tripa en la arquitectura de redes neuronales no es científica. Pruébalo y pruébalo.

Neil Slater
fuente