Para ajustar su pérdida con respecto a cada clase de salida, puede multiplicar los logits con un vector de peso que representa el factor de escala para cada clase. Digamos que sus datos tienen 40% de muestras para cada una de las dos clases mayoritarias y 10% de muestras para cada una de las dos clases minoritarias. Luego puede configurar su vector de peso de la clase de la siguiente manera:
class_weight = tf.constant ([0.1, 0.1, 0.4, 0.4])
Ahora necesita simplemente multiplicar los logits con los pesos de las clases para escalar las predicciones para cada clase. Es decir, disminuirá la pérdida para las clases mayoritarias y aumentará la pérdida para las clases minoritarias.
- ¿Cómo funciona el algoritmo de fijación de precios de Uber?
- ¿Hay alguna API (y documentación) disponible para crear arquitecturas de red neuronal personalizadas usando Deeplearning4j?
- ¿Necesita saber la teoría de la medida para hacer investigación de aprendizaje automático?
- ¿Cuál es la diferencia entre la regresión de mínimos cuadrados ordinarios y la regresión lineal con el método de mínimos cuadrados?
- ¿Por qué es tan fácil el aprendizaje profundo?
logits = … # forma: [lote_tamaño, 4]
scaled_logits = tf.mul (logits, class_weight) # forma [lote_tamaño, 4]
pérdida = tf.nn.softmax_cross_entropy_with_logits (weighted_logits, etiquetas)
También puede usar la función estándar de un TF que le permite ajustar su pérdida con respecto a cada muestra en su lote. Tenga en cuenta que para esta función, en lugar de definir el vector de peso para cada clase, debe definirlo para cada muestra de su lote.
tf.losses.softmax_cross_entropy | TensorFlow
Si está particularmente preocupado por penalizar las clasificaciones erróneas, consulte esta respuesta sobre un problema pertinente de Keras:
¿Hay alguna forma en Keras de aplicar diferentes pesos a una función de costo? · Edición # 2115 · fchollet / keras