首页 > 解决方案 > 成本函数变成 NaN

问题描述

我有一个单层神经网络,成本函数(Sigmoid)中有 NaN 值。我查了一下,发现原因是我的对数为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)

有人可以帮忙吗?我不知道如何避免该错误。

标签: pythonneural-network

解决方案


一种解决方案可能是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。


推荐阅读