[Tensorflow2.0] pérdidas de la función de pérdida

En general, la función objetivo del aprendizaje supervisado consiste en una función de pérdida y términos de regularización. (Objetivo = Pérdida + Regularización)

Para el modelo keras, los términos de regularización en la función objetivo generalmente se especifican en cada capa. Por ejemplo, usando los parámetros kernel_regularizer y bias_regularizer de Dense para especificar los pesos. Use términos de regularización l1 o l2. Además, también puede usar kernel_constraint y bias_constraint para restringir los pesos. Rango de valores, este también es un medio de regularización.

La función de pérdida se especifica cuando se compila el modelo. Para los modelos de regresión, la función de pérdida comúnmente utilizada es la función de pérdida cuadrada mean_squared_error.

Para los modelos de clasificación binaria, generalmente se utiliza la función de pérdida de entropía cruzada binaria binary_crossentropy.

Para el modelo de clasificación múltiple, si la etiqueta está codificada por el número de serie de la categoría, se utiliza la función de pérdida de entropía cruzada de categoría categorical_crossentropy. Si la etiqueta está codificada en caliente, debe usar la función de pérdida de entropía cruzada de categoría dispersa sparse_categorical_crossentropy.

Si es necesario, también puede personalizar la función de pérdida. La función de pérdida personalizada necesita recibir dos tensores y_true e y_pred como parámetros de entrada y generar un escalar como valor de la función de pérdida.

importa numpy como np
 importa pandas como pd
 importa tensorflow como tf
 desde tensorflow.keras importa capas, modelos, pérdidas, regularizadores, restricciones

Primero, la función de pérdida y el término de regularización

tf.keras.backend.clear_session () 
 
model = models.Sequential () 
model.add (layers.Dense ( 64, input_dim = 64 , 
                kernel_regularizer = regularizers.l2 (0.01 ), 
                activity_regularizer = regularizers.l1 (0.01 ), 
                kernel_constraint = constraints.MaxNorm (MAX_VALUE = 2, eje = 0))) 
model.add (layers.Dense ( 10 , 
        kernel_regularizer = regularizers.l1_l2 (0.01,0.01), la activación = " sigmoide " )) 
model.compile (optimizador = " rmsprop " ,
        loss = " sparse_categorical_crossentropy " , metrics = [ " AUC " ]) 
model.summary ()
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense (Dense)                (None, 64)                4160      
_________________________________________________________________
dense_1 (Dense)              (None, 10)                650       
=================================================================
Total params: 4,810
Trainable params: 4,810
Non-trainable params: 0
_________________________________________________________________

En segundo lugar, la función de pérdida incorporada.

La función de pérdida incorporada generalmente tiene dos formas: implementación de clase e implementación de función.

Por ejemplo: CategoricalCrossentropy y categorical_crossentropy son funciones categóricas de pérdida de entropía cruzada, la primera es la forma de implementación de la clase, la segunda es la forma de implementación de la función.

Algunas funciones de pérdida incorporadas comúnmente utilizadas se describen a continuación.

  • mean_squared_error (pérdida de error al cuadrado, utilizada para regresión, abreviada como mse, el formulario de implementación de clase es MeanSquaredError y MSE)

  • mean_absolute_error (pérdida de error de valor absoluto, utilizada para regresión, abreviada como mae, el formulario de implementación de clase es MeanAbsoluteError y MAE)

  • mean_absolute_percentage_error (porcentaje medio de pérdida de error, usado para regresión, abreviado como mape, el formulario de implementación de clase es MeanAbsolutePercentageError y MAPE)

  • Huber (pérdida de Huber, solo un formulario de implementación de clase, utilizado para la regresión, entre mse y mae, es más robusto para los valores atípicos y tiene ciertas ventajas sobre mse)

  • binary_crossentropy (entropía cruzada binaria, utilizada para la clasificación binaria, el formulario de implementación de clase es BinaryCrossentropy)

  • categorical_crossentropy (La entropía cruzada de categorías, utilizada para la clasificación múltiple, requiere que la etiqueta sea codificación onehot, el formulario de implementación de clase es CategoricalCrossentropy)

  • sparse_categorical_crossentropy (la entropía cruzada de categoría dispersa, utilizada para la clasificación múltiple, requiere que la etiqueta sea un formulario de codificación de número de serie, y el formulario de implementación de clase es SparseCategoricalCrossentropy)

  • bisagra (función de pérdida de bisagra, utilizada para la clasificación binaria, la aplicación más famosa es como función de pérdida de la máquina de vectores de soporte SVM, el formulario de implementación de clase es Bisagra)

  • kld (pérdida de entropía relativa, también llamada divergencia KL, comúnmente utilizada en la función de pérdida del algoritmo máximo esperado EM, una medida de información de la diferencia entre dos distribuciones de probabilidad. La forma de implementación de clase es KLDivergence o KLD)

  • cosine_similarity (similitud de coseno, se puede utilizar para la clasificación múltiple, el formulario de implementación de clase es CosineSimilarity)

Tres, función de pérdida personalizada

La función de pérdida personalizada recibe dos tensores y_true y y_pred como parámetros de entrada y genera un escalar como valor de la función de pérdida.

También puede subclasificar tf.keras.losses.Loss y reescribir el método de llamada para implementar la lógica de cálculo de pérdida, a fin de obtener la realización de la clase de función de pérdida.

La siguiente es una demostración de implementación personalizada de pérdida focal. La pérdida focal es una forma mejorada de función de pérdida para binary_crossentropy.

En el caso del desequilibrio de categorías y la existencia de muestras de entrenamiento difíciles, puede lograr mejores resultados que la entropía cruzada binaria.

Para obtener detalles, consulte "¿Cómo evaluar la pérdida focal de Kaiming para la detección de objetos densos?"

https://www.zhihu.com/question/63581984

def focal_loss (gamma = 2., alpha = 0.25 ): 
 
    def focal_loss_fixed (y_true, y_pred): 
        pt_1 = tf.where (tf.equal (y_true, 1 ), y_pred, tf.ones_like (y_pred)) 
        pt_0 = tf.where (tf.equal (y_true, 0), y_pred, tf.zeros_like (y_pred)) 
        loss = -tf.sum (alpha * tf.pow (1. - pt_1, gamma) * tf.log (1e-07 + pt_1) ) \
            -tf.sum ((1-alpha) * tf.pow (pt_0, gamma) * tf.log (1. - pt_0 + 1e-07 ))
         return loss
     return focal_loss_fixed 
 
class FocalLoss (loss.Loss): 
 
    def  __init__ (self, gamma = 2.0, alpha = 0.25 ):
        self.gamma = gamma 
        self.alpha = alpha 
 
    def call (self, y_true, y_pred): 
 
        pt_1 = tf.where (tf.equal (y_true, 1 ), y_pred, tf.ones_like (y_pred)) 
        pt_0 = tf.where ( tf.equal (y_true, 0), y_pred, tf.zeros_like (y_pred)) 
        loss = -tf.sum (self.alpha * tf.pow (1. - pt_1, self.gamma) * tf.log (1e-07 + pt_1)) \
            -tf.sum ((1-self.alpha) * tf.pow (pt_0, self.gamma) * tf.log (1. - pt_0 + 1e-07 ))
         pérdida de retorno

 

Referencia:

Dirección de libro electrónico de código abierto: https://lyhue1991.github.io/eat_tensorflow2_in_30_days/

Dirección del proyecto GitHub: https://github.com/lyhue1991/eat_tensorflow2_in_30_days

Supongo que te gusta

Origin www.cnblogs.com/xiximayou/p/12689879.html
Recomendado
Clasificación