Implementación de Python de función de pérdida de aprendizaje automático

1) Error cuadrático medio

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Realización del programa

def mean_squared_error(y, t):
    return 0.5 * np.sum((y-t)**2)

Por ejemplo:

    t = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]#假设第二个位置为正确值,ont-hot显示
    y1 = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]#实际的向量,2的概率最大
    val = mean_squared_error(np.array(y1), np.array(t))
    print(val)#0.09750000000000003  均方差比较小

    y2 = [0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0]#7的位置 概率最大
    val = mean_squared_error(np.array(y2), np.array(t))
    print(val)#0.5975  均方差比较大
    #由此可见y1 与目标值相近

2) El error de entropía cruzada
Inserte la descripción de la imagen aquí
yk es la salida de la red neuronal y tk es la etiqueta de solución correcta.
El valor del error de entropía cruzada está determinado por el resultado de salida correspondiente al etiquetado correcto.

Cuanto mayor sea la salida correspondiente al etiquetado correcto, más cerca estará el valor de 0; cuando la salida es 1, el error de entropía cruzada es 0. Además, si la salida correspondiente a la solución correcta de la etiqueta es menor, el valor de la fórmula es mayor .

def cross_entropy_error(y, t):
	delta = 1e-7
	return -np.sum(t * np.log(y + delta))

por ejemplo

    t = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]  # 假设第二个位置为正确值,ont-hot显示
    y1 = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]  # 实际的向量,2的概率最大
    val = cross_entropy_error(np.array(y1), np.array(t))
    print(val)#0.510825457099338
    
    y2 = [0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0]#7的位置 概率最大
    val = cross_entropy_error(np.array(y2), np.array(t))
    print(val)#2.302584092994546

2) Procesamiento por lotes

forma one-hot

def cross_entroy_error(y,t):
    if y.ndim == 1:
        t = t.reshape(1,t.size)#转化为二维
        y = y.reshape(1,y.size)
    batch_size = y.shape[0]
    return -np.sum(t*np.log(y+1e-7))/batch_size

Forma no one-hot

def cross_entroy_error(y,t):
    if y.ndim == 1:
        t = t.reshape(1,t.size)
        y = y.reshape(1,y.size)
    batch_size = y.shape[0]
    return -np.sum(np.log(y[np.arrange(batch_size),t]+1e-7))/batch_size
    #np.log(y[np.arrange(batch_size),t]+1e-7) 

Si se puede obtener la salida de la red neuronal en la etiqueta de solución correcta, se puede calcular el error de entropía cruzada. Por lo tanto, cuando t es una representación one-hot, donde se calcula t * np.log (y), cuando t es una forma de etiqueta, np.log (y [np.arange (batch_size), t]) se puede usar para lograr el mismo procesamiento.

Supongo que te gusta

Origin blog.csdn.net/WANGYONGZIXUE/article/details/110294482
Recomendado
Clasificación