scikit-learn.org/stable/modules/generated/...

чаю нейронную сеть, и я хочу написать функциюcross_entropy в питоне. Где это определяется как

гдеN количество образцов,k это количество классов,log натуральный логарифм,t_i,j 1, если образецi в классеj а также0 в противном случае иp_i,j это прогнозируемая вероятность того, что образецi в классеj, Чтобы избежать численных проблем с логарифмом, обрезать прогнозы в[10^{−12}, 1 − 10^{−12}] ассортимент.

В соответствии с приведенным выше описанием, я записал коды в соответствии с прогнозами[epsilon, 1 − epsilon] диапазон, затем вычисление cross_entropy на основе приведенной выше формулы.

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

Следующий код будет использоваться для проверки, если функцияcross_entropy верны.

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

Вывод вышеуказанных кодов - False, то есть мои коды для определения функцииcross_entropy не является правильным. Затем я печатаю результатcross_entropy(predictions, targets), Это дало0.178389544455 и правильный результат должен бытьans = 0.71355817782, Может ли кто-нибудь помочь мне проверить, в чем проблема с моими кодами?

Ответы на вопрос(2)

Ваш ответ на вопрос