What is the best Keras model for multi-class classification?

I am working on research, where need to classify one of three event WINNER=(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


My current model is:

def build_model(input_dim, output_classes):
model = Sequential()
return model

1. I am not sure that is the correct one for multi-class classification
2. What is the best setup for binary classification?

EDIT: #2 - Like that?

model.add(Dense(input_dim=input_dim, output_dim=12, activation='sigmoid'))

• Do you mean "model", or just referring to choice of last layer's activation='softmax' and compile choice of loss='categorical_crossentropy'? IMO, your choices for those are good for a model to predict multiple mutually-exclusive classes. If you want advice on the whole model, that is quite different, and you should explain more about what your concerns are, otherwise there is too much to explain in a single answer. Feb 1 '16 at 16:09
• I mean about architecture of layers mostly. Any advise for my question #2? Feb 1 '16 at 16:29
• There is rarely a "right" way to construct the architecture, that should be something you test with different meta-params, and should be results-driven (including any limits you might have on resource use for training time/memory use etc). For #2, you can either just have two outputs with softmax similar to now, or you can have output layer with one output, activation='sigmoid' and loss='binary_crossentropy' Feb 1 '16 at 16:33
• activation='sigmoid' in the output layer. The hidden layer can stay as 'relu' if you like (although I would probably start with 'tanh' for this problem, that is personal preference with very little support from theory) Feb 1 '16 at 16:38

Your choices of activation='softmax' in the last layer and compile choice of loss='categorical_crossentropy' are good for a model to predict multiple mutually-exclusive classes.
For Question #2, you can either just have two outputs with a softmax final similar to now, or you can have final layer with one output, activation='sigmoid' and loss='binary_crossentropy'.
Purely from a gut feel from what might work with this data, I would suggest trying with 'tanh' or 'sigmoid' activations in the hidden layer, instead of 'relu', and I would also suggest increasing the number of hidden neurons (e.g. 100) and reducing the amount of dropout (e.g. 0.2). Caveat: Gut feeling on neural network architecture is not scientific. Try it, and test it.