1) Error cuadrático medio
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
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.