Saltar al contenido

¿Cuál es la diferencia entre sparse_categorical_crossentropy y categorical_crossentropy?

Solución:

Simplemente:

  • categorical_crossentropy (cce) produce una matriz one-hot que contiene la coincidencia probable para cada categoría,
  • sparse_categorical_crossentropy (scce) produce un índice de categoría del más probable categoría coincidente.

Considere un problema de clasificación con 5 categorías (o clases).

  • En el caso de cce, el objetivo único puede ser [0, 1, 0, 0, 0] y el modelo puede predecir [.2, .5, .1, .1, .1] (probablemente correcto)

  • En el caso de scce, el índice objetivo puede ser [1] y el modelo puede predecir: [.5].

Considere ahora un problema de clasificación con 3 clases.

  • En el caso de cce, el objetivo único podría ser [0, 0, 1] y el modelo puede predecir [.5, .1, .4] (probablemente inexacto, dado que le da más probabilidad a la primera clase)
  • En el caso de scce, el índice de destino podría ser [0]y el modelo puede predecir [.5]

Muchos modelos categóricos producen scce salida porque ahorra espacio, pero pierde MUCHA información (por ejemplo, en el segundo ejemplo, el índice 2 también estaba muy cerca). cce salida para la confiabilidad del modelo.

Hay una serie de situaciones para usar scce, incluyendo:

  • cuando sus clases son mutuamente excluyentes, es decir, no le importan en absoluto otras predicciones lo suficientemente cercanas,
  • el número de categorías es grande y la salida de la predicción se vuelve abrumadora.

Del código fuente de TensorFlow, el sparse_categorical_crossentropy Se define como categorical crossentropy con objetivos enteros:

def sparse_categorical_crossentropy(target, output, from_logits=False, axis=-1):
  """Categorical crossentropy with integer targets.
  Arguments:
      target: An integer tensor.
      output: A tensor resulting from a softmax
          (unless `from_logits` is True, in which
          case `output` is expected to be the logits).
      from_logits: Boolean, whether `output` is the
          result of a softmax, or is a tensor of logits.
      axis: Int specifying the channels axis. `axis=-1` corresponds to data
          format `channels_last', and `axis=1` corresponds to data format
          `channels_first`.
  Returns:
      Output tensor.
  Raises:
      ValueError: if `axis` is neither -1 nor one of the axes of `output`.
  """

Del código fuente de TensorFlow, el categorical_crossentropy se define como una entropía cruzada categórica entre un tensor de salida y un tensor de destino.

def categorical_crossentropy(target, output, from_logits=False, axis=-1):
  """Categorical crossentropy between an output tensor and a target tensor.
  Arguments:
      target: A tensor of the same shape as `output`.
      output: A tensor resulting from a softmax
          (unless `from_logits` is True, in which
          case `output` is expected to be the logits).
      from_logits: Boolean, whether `output` is the
          result of a softmax, or is a tensor of logits.
      axis: Int specifying the channels axis. `axis=-1` corresponds to data
          format `channels_last', and `axis=1` corresponds to data format
          `channels_first`.
  Returns:
      Output tensor.
  Raises:
      ValueError: if `axis` is neither -1 nor one of the axes of `output`.
  """

El significado de los destinos enteros es que las etiquetas de destino deben tener la forma de una lista de enteros que muestre el índice de la clase, por ejemplo:

  • Para sparse_categorical_crossentropy, Para objetivos de clase 1 y clase 2, en un problema de clasificación de 5 clases, la lista debe ser [1,2]. Básicamente, los destinos deben estar en forma de número entero para poder llamar sparse_categorical_crossentropy. Esto se denomina disperso porque la representación de destino requiere mucho menos espacio que la codificación one-hot. Por ejemplo, un lote con b objetivos y k necesidades de clases b * k espacio para ser representado en one-hot, mientras que un lote con b objetivos y k necesidades de clases b espacio a representar en forma de número entero.

  • Para categorical_crossentropy, para objetivos de clase 1 y clase 2, en un problema de clasificación de 5 clases, la lista debe ser [[0,1,0,0,0], [0,0,1,0,0]]. Básicamente, los objetivos deben estar en forma one-hot para poder llamar categorical_crossentropy.

La representación de los objetivos es la única diferencia, los resultados deben ser los mismos ya que ambos están calculando la entropía cruzada categórica.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *