我有一层神经网络,成本函数中有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)
有人可以帮忙吗?我不知道如何避免该错误。
答案 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。