Função de entropia cruzada (python)

Estou aprendendo a rede neural e quero escrever uma funçãocross_entropy em python. Onde é definido como

OndeN é o número de amostras,k é o número de classes,log é o logaritmo natural,t_i,j é 1 se a amostrai está na aulaj e0 caso contrário, ep_i,j é a probabilidade prevista de que a amostrai está na aulaj. Para evitar problemas numéricos com o logaritmo, recorte as previsões para[10^{−12}, 1 − 10^{−12}] alcance.

De acordo com a descrição acima, eu escrevi os códigos clippint as previsões para[epsilon, 1 − epsilon] intervalo, calculando a cross_entropy com base na fórmula acima.

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

O código a seguir será usado para verificar se a funçãocross_entropy estão corretas.

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))

A saída dos códigos acima é False, ou seja, meus códigos para definir a funçãocross_entropy não está correto. Depois imprimo o resultado decross_entropy(predictions, targets). Deu0.178389544455 e o resultado correto deve serans = 0.71355817782. Alguém poderia me ajudar a verificar qual é o problema com meus códigos?

questionAnswers(2)

yourAnswerToTheQuestion