Función de entropía cruzada (python)

Estoy aprendiendo la red neuronal y quiero escribir una función.cross_entropy en pitón Donde se define como

dóndeN es el número de muestrask es el número de claseslog es el logaritmo naturalt_i,j es 1 si muestrai esta en clasej y0 de lo contrario, yp_i,j es la probabilidad pronosticada de que la muestrai esta en clasej. Para evitar problemas numéricos con el logaritmo, recorte las predicciones a[10^{−12}, 1 − 10^{−12}] distancia.

De acuerdo con la descripción anterior, escribí los códigos recortando las predicciones para[epsilon, 1 − epsilon] rango, luego calculando la cross_entropy según la fórmula anterior.

def cross_entropy(predictions, targets, epsilon=1e-12):
    """
    Computes cross entropy between targets (encoded as one-hot vectors)
    and predictions. 
    Input: predictions (N, k) ndarray
           targets (N, k) ndarray        
    Returns: scalar
    """
    predictions = np.clip(predictions, epsilon, 1. - epsilon)
    ce = - np.mean(np.log(predictions) * targets) 
    return ce

El siguiente código se usará para verificar si la funcióncross_entropy son correctos

predictions = np.array([[0.25,0.25,0.25,0.25],
                        [0.01,0.01,0.01,0.96]])
targets = np.array([[0,0,0,1],
                  [0,0,0,1]])
ans = 0.71355817782  #Correct answer
x = cross_entropy(predictions, targets)
print(np.isclose(x,ans))

La salida de los códigos anteriores es False, es decir, mis códigos para definir la funcióncross_entropy no es correcto. Luego imprimo el resultado decross_entropy(predictions, targets). Lo dio0.178389544455 y el resultado correcto debería serans = 0.71355817782. ¿Alguien podría ayudarme a verificar cuál es el problema con mis códigos?

Respuestas a la pregunta(2)

Su respuesta a la pregunta