Как я могу вычислить кросс-энтропию для двоичного результата сигмовидной нейронной сети?

#python #neural-network #cross-entropy #sigmoid

#python #нейронная сеть #кросс-энтропия #сигмоид

Вопрос:

В настоящее время я создаю NN с нуля, где мы хотим определить на основе двух входных переменных (X_1 и X_2), какими будут их выходные данные (0 или 1). У меня есть 2 скрытых слоя с сигмовидной активацией на всех нейронах, однако я застреваю при вычислении кросс-энтропии. Предположим, что в выходном слое у меня есть предсказания [0.50, 0.57] , однако истинный результат равен 0, так [1, 0] что . Как мне вычислить кросс-энтропию по этому примеру двоичного вывода? У кого-нибудь есть какие-либо предложения / советы?

Ответ №1:

Вот функция, которую я написал и использую для вычисления кросс-энтропии с учетом списка прогнозов и списка истинных меток.

 from math import log
# calculate the cross-entropy of predictions and true labels
def cross_entropy(y, p):
    # y[i] is list of real labels
    # p[i] is the probability of predicting 1
    m = len(y)
    sum_vals = 0
    for i in range(m):
        # first term is for label=1, second term is for label=0
        sum_vals  = float(y[i]) * log(p[i])   (1 - float(y[i])) * log(1 - p[i])
    R = -1/m * sum_vals
    return R
 

Здесь значения в списке меток y равны либо 0, либо 1, а вероятностные прогнозы из сети находятся в списке p .

Комментарии:

1. Прежде всего, большое вам спасибо! Однако знаете ли вы, могу ли я интерпретировать выходные значения из NN как вероятности? Поскольку я использовал только сигмовидные активации в нейронах

2. Итак, моя функция предполагает, что NN выводит одну переменную, которая представляет вероятность прогнозирования 1. Если я правильно понимаю, ваша реализация выдает как вероятность предсказания 0, так и вероятность предсказания 1. Итак, что я бы рекомендовал сделать, это нормализовать ваши прогнозы. т. Е. В вашем примере [0.50,0.57] настройки y=0 и p=0.57/(0.50 0.57) при создании списков для отправки через функцию, которую я включил.