#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)
при создании списков для отправки через функцию, которую я включил.