Функция стоимости превращается в NaN - PullRequest
0 голосов
/ 10 мая 2019

У меня есть однослойная нейронная сеть, и в функции стоимости есть значения NaN (Sigmoid).Я проверил это и обнаружил, что причина в том, что у меня логарифм 0.

def compute_cost(y_model,y_train):
    m = y_train.shape[0]  
    cost = - (1 / m) * np.sum(np.multiply(y_train, np.log(y_model)) + np.multiply(1 - y_train, np.log(1 - y_model)))
    return cost
L = compute_cost(y_model,y_train)

Кто-нибудь может помочь с этим?Я понятия не имею, как избежать этой ошибки.

1 Ответ

0 голосов
/ 10 мая 2019

Одним из решений может быть добавление epsilon << 1 к вашим выражениям в журнале. Таким образом, если y_train == 0, выражение в журнале будет очень маленьким, но не NaN.

Например, возьмите epsilon = 1e-5 и измените выражение следующим образом:

def compute_cost(y_model,y_train):
    m = y_train.shape[0]  
    eps = 1e-5
    cost = - (1 / m) * np.sum(np.multiply(y_train, np.log(y_model + eps)) + np.multiply(1 - y_train, np.log(1 - y_model + eps)))
    return cost
L = compute_cost(y_model,y_train)

Таким образом, вы можете получить желаемый результат без NaN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...