Creates a new softmax layer
        :param name: name to set for the layer
        :param axis:
        :param input_layer_name: name of the input layer for this layer. If None, it will take the last added layer of
        the network.

def new_softmax(self, name, axis, input_layer_name: str=None):
        """
        Creates a new softmax layer
        :param name: name to set for the layer
        :param axis:
        :param input_layer_name: name of the input layer for this layer. If None, it will take the last added layer of
        the network.
        """
        input_layer = self.__network.get_layer(input_layer_name)

        if LooseVersion(tf.__version__) < LooseVersion("1.5.0"):
            max_axis = tf.reduce_max(input_layer, axis, keep_dims=True)
            target_exp = tf.exp(input_layer - max_axis)
            normalize = tf.reduce_sum(target_exp, axis, keep_dims=True)
        else:
            max_axis = tf.reduce_max(input_layer, axis, keepdims=True)
            target_exp = tf.exp(input_layer - max_axis)
            normalize = tf.reduce_sum(target_exp, axis, keepdims=True)

        softmax = tf.div(target_exp, normalize, name)

        self.__network.add_layer(name, layer_output=softmax)