Lilo
Lilo

Reputation: 640

Multi-class multi-label classification in Keras

I am trying to train a multi-task multi-label classifier using Keras. The output layer is a fork of two outputs. The task of each output layer is to predict the categories of its task. The y vectors are OneHot encoded.

Final output layer

I am using a custom generator for my data that yields the y arrays in a list to the fit_generator function

I am using a categorigal_crossentropy loss function at each layer

fork1.compile(loss={'O1': 'categorical_crossentropy', 'O2': 'categorical_crossentropy'},
              optimizer=optimizers.Adam(lr=0.001),
              metrics=['accuracy'])

The problem: The loss doesn't decrease with this setup. However, if I train each task separately, I have low loss and high accuracy. So what could be the problem ?

Upvotes: 2

Views: 3126

Answers (1)

Grigorios Kalliatakis
Grigorios Kalliatakis

Reputation: 420

To perform multilabel categorical classification (where each sample can have several classes), end your stack of layers with a Dense layer with a number of units equal to the number of classes and a sigmoid activation, and use binary_crossentropy as the loss. Your targets should be k-hot encoded.

Regarding the multi-output model, training such a model requires the ability to specify different loss functions for different heads of the network requiring a different training procedure.

You should provide more info in order to give a clear indication of what you want to achieve.

Upvotes: 2

Related Questions