Multiple output classes in keras
how would I have to format my data to make it work with Keras?


Your training labels in the output layer should be a binary vector that is 1 for class which is present and 0 for class which is not. For example, let us assume you have 3 classes of genres - comedy, romantic and horror. There are many ways to make it and Scikit-learn has a method which makes it very easy which I show below.

&gt;&gt;&gt; from sklearn.preprocessing import MultiLabelBinarizer
&gt;&gt;&gt; mlb = MultiLabelBinarizer()
&gt;&gt;&gt; y = mlb.fit_transform([[0,2],[1]])
array([[1, 0, 1],
   [0, 1, 0]])



  I initially considered using a softmax layer as my output layer, but since a movie can have multiple genre labels, how should my output be?


This is a simple Keras example I suggest.

&gt;&gt;&gt; from keras.models import Sequential
&gt;&gt;&gt; from keras.layers import Dense, Activation

&gt;&gt;&gt; model = Sequential([
    Dense(32, input_dim=784),
    Activation('relu'),
    Dense(10),
    Activation('sigmoid'),
    ])
&gt;&gt;&gt; model.compile(optimizer='rmsprop', loss='binary_crossentropy')
&gt;&gt;&gt; model.fit(X_train, y_train)


Refer this for more info. I used sigmoid because it is better for multilabel classification.