entropía cruzada softmax VS entropía cruzada sigmoidea

Softmax Cross Entropy Vs Sigmoid Cross Entropy

|_+_| |_+_| |_+_|

|_+_| VS |_+_|
import tensorflow as tf import numpy as np Devolver forma a [2, 1]
# labels: Category tags labels = np.array([[1, 0, 0], [0, 1, 0]], dtype=np.float32) # logits: Output data logits = np.array([[0.5, 0.3, 0.2], [0.1, 0.8, 0.1]], dtype=np.float32) res_softmax_cross_loss = tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits) res_sigmoid_cross_loss = tf.nn.sigmoid_cross_entropy_with_logits(labels=labels, logits=logits) with tf.Session() as sess: softmax_cross_loss = sess.run(res_softmax_cross_loss) sigmoid_cross_loss = sess.run(res_sigmoid_cross_loss) print('softmax_cross_entropy_with_logits return format: ', softmax_cross_loss) print() print('sigmoid_cross_entropy_with_logits return format: ', sigmoid_cross_loss) Devolver forma a [2, 3]
Donde 2 es el tamaño de batch_size, es decir, el número de muestras en el lote 3 es el número de categorías de etiquetas de muestra
que es softmax_cross_entropy_with_logits return format: [ 0.93983108 0.68972671] sigmoid_cross_entropy_with_logits return format: [[ 0.47407699 0.85435522 0.79813886] [ 0.74439675 0.37110069 0.74439675]] Solo calcule la entropía cruzada de la dimensión con la etiqueta 1 y las otras dimensiones son 0.
softmax_cross_entropy_with_logits Calculará la entropía cruzada de todas las dimensiones de la etiqueta (calcula el logloss, por lo que las otras dimensiones no son iguales a 0)

Las características anteriores determinan sigmoid_cross_entropy_with_logits Solo se puede usar para datos de una sola etiqueta, softmax_cross_entropy_with_logits Datos que se pueden usar para múltiples etiquetas



|_+_| |_+_| |_+_| |_+_| |_+_|

El logloss usado por sigmoid_cross_entropy_with_logits (vea lo anterior para la forma de logloss)
El logloss original puede verse como una función de pérdida de entropía cruzada.
Los siguientes tres resultados son consistentes



|_+_| |_+_| |_+_| |_+_| |_+_| |_+_|

Finalmente, el resultado del cálculo de la entropía cruzada debe darse a sigmoid_cross_entropy_with_logits Obtener un escalar y luego propagarlo de regreso.