Machine learning algorithm which gives multiple outputs from single input
Keras functional API's are a way your can solve you problem. Using keras functional API, we can build models that resembles more like graphs such as this: 



In order to build a model like this, you can use keras as follows:

from keras.models import Model
from keras import layers
from keras import Input

input_layer = Input(shape=(100,), dtype='float32', name="Input")
split_layer = layers.Dense(32, activation='relu', name='split_layer')(input_layer)
first_layer = layers.Dense(32, activation='relu', name='first_layer')(split_layer)
second_layer = layers.Dense(32, activation='relu', name='second_layer')(split_layer)
model = Model(input_layer,[first_layer, second_layer])
model.summary()


In order to compile this model, we can define different loss functions for different layers

model.comile(optimizer=optimizer, 
            loss={'first_layer':'mse', 'second_layer':'binary_crossentropy'},
            metrics=['accuracy'])


Once you are done with building the network, you could simply fit you data as follows:

model.fit(X,
        {'first_layer': first_layer_Y,
         'second_layer': second_layer_targets},
          epochs=10
        )