code: def categorical_crossentropy(
      target, output, from_logits=False, axis=-1
  ):
      target = np.array(target)
      output = np.array(output)
  
      if target.shape != output.shape:
          raise ValueError(
              "Arguments `target` and `output` must have the same shape. "
              "Received: "
              f"target.shape={target.shape}, output.shape={output.shape}"
          )
      if len(target.shape) < 1:
          raise ValueError(
              "Arguments `target` and `output` must be at least rank 1. "
              "Received: "
              f"target.shape={target.shape}, output.shape={output.shape}"
          )
  
      if from_logits:
          log_prob = log_softmax(output, axis=axis)
      else:
          output = output / np.sum(output, axis, keepdims=True)
          output = np.clip(output, epsilon(), 1.0 - epsilon())
          log_prob = np.log(output)
      return -np.sum(target * log_prob, axis=axis)
  
imports: import jax
  import numpy
  from jax import lax
  from jax import numpy
  from keras.backend import standardize_data_format
  from keras.backend import standardize_dtype
  from keras.backend.common.backend_utils import compute_conv_transpose_padding_args_for_jax
  from keras.backend.config import epsilon
  from keras.backend.numpy.core import cast
  from keras.backend.numpy.core import convert_to_tensor
  from keras.backend.numpy.core import is_tensor
  from keras.utils.module_utils import scipy
label_desc: Use image node_id 28 for calling a global function with example usage: categorical_crossentropy(target, output, from_logits, axis) and returns: unknown