[Algoritmo de rasgado manual] [Keras] función de evaluación de pérdida de Hamming personalizada de keras

1. Código

1.1 Código fuente (copiar y usar directamente)

:star: copie el siguiente código directamente en el modelo para su uso (se ha probado y se puede discutir en el área de comentarios)

import keras.backend as K

def my_tp_tn_fp_fn(y_true, y_pred):
    true_posi_sum = K.cast(K.sum(y_true), "int32")
    true_nag_sum = K.cast(K.sum(y_true-1), "int32")*(-1)
    pred_posi_sum = K.sum(K.cast(K.greater(y_pred, 0.5), "int32"))

    tp = K.sum(K.cast(K.greater(K.clip(y_true * y_pred, 0.0, 1.0), 0.50), "int32"))
    fn = true_posi_sum - tp
    fp = pred_posi_sum - tp
    tn = true_nag_sum - fp

    tp = K.cast(tp, "float32")
    tn = K.cast(tn, "float32")
    fp = K.cast(fp, "float32")
    fn = K.cast(fn, "float32")

    return tp, tn, fp, fn

def keras_hanmingloss(y_true, y_pred):
    tp, tn, fp, fn = my_tp_tn_fp_fn(y_true, y_pred)
    num_wrong = fp + fn
    total = tp + tn + fp + fn
    hanming_loss = (num_wrong + K.epsilon())/ total

    return hanming_loss
复制代码

1.2 Ideas de construcción

  • diagrama de flujo

image.png

flowchart TD
step1[建立函数求出TP_TN_FP_FN]
step2[根据汉明损失原理构造损失函数]
step3[ 结合Sci-kitlearn库的hanminglossAPI进行验证]

step1 --> step2 
step2 --> step3
  • Primero encuentra todos los TP, TN, FP, FN

  • Luego construya la función de pérdida de acuerdo con todos los TP, TN, FP, FN combinados con la fórmula de pérdida de Hamming

  • Validar con la API hanmingloss de la librería Sci-kitlearn

1.3 Verificación con sklearn

  • El efecto de código personalizado, como se muestra en la siguiente figura, es:0.06353355

image.png

  • El efecto de pérdida de Hamming de sklearn, como se muestra en la siguiente figura, es: 0.06353354978354979(Debido a que el primero es float32, la precisión del último float64 será mayor)

在这里插入图片描述

1.4 Efecto experimental

  • El efecto de la fase de entrenamiento.

image.png

  • Evaluar efectos de fase

image.png

2. Pérdida de Hamming

2.1 Introducción

  • Distancia de Hamming: encuentre la cantidad de elementos diferentes en la posición correspondiente de dos matrices del mismo tamaño
  • Pérdida de Hamming: distancia de Hamming dividida por número de elementos de la matriz
  • La pérdida de Hamming es en realidad la distancia de Hamming dividida por el número total de elementos
1. 汉明距离是使用在数据传输差错控制编码里面的,汉明距离是一个概念,它表示两个(相同长度)字符串对应位置的
不同字符的数量,我们以d(x,y)表示两个字x,y之间的汉明距离。
2. 对两个字符串进行异或运算,并统计结果为1的个数,那么这个数就是汉明距离。
复制代码

2.2 Oficial

  • y ^ \hat y Para predecir el resultado , y y es elresultado real, y i j y_{ij} Para el i-ésimo elemento en la j-ésima columna , el valor máximo de i es n , y el valor máximo de j es m , en otras palabras, y ^ y \hat y和y 均为 n*m大小的矩阵

H a m m i n g l o s s ( y , y ^ ) = 1 n i = 1 n 1 m j = 1 m 1 ( y ^ i j y i j ) Hamming-loss(y, \hat{y}) = \frac{1}{n} \sum_{i=1}^{n} \frac{1}{m} \sum_{j=1}^{m}1*(\hat y_{ij} \neq y_{ij})

2.3 应用场景

  • 一般应用在多标签分类任务中
  • 一般用作损失函数或者评价函数

3.参考资料

  1. CSDN: TP、TN、FP、FN超级详细解析

  2. 百度百科: 汉明距离

  3. CSDN: 可能是最全的机器学习模型评估指标总结

  4. 未知来源: 常用数学符号的 LaTeX 表示方法

Supongo que te gusta

Origin juejin.im/post/7085248007406518303
Recomendado
Clasificación