docs: def softmax_categorical_cross_entropy_cost( outputs, targets, derivative=False, epsilon=1e-11 ):
      """
      The output signals should be in the range [0, 1]
      """
      outputs = np.clip(outputs, epsilon, 1 - epsilon)
      
      if derivative:
          return outputs - targets
      else:
          return np.mean(-np.sum(targets * np.log( outputs ), axis=1))