成本函数变为NaN

时间:2019-05-10 12:21:27

标签: python neural-network

我有一层神经网络,成本函数中有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 :(得分:0)

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