python - 成本函数变成 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)
有人可以帮忙吗?我不知道如何避免该错误。
解决方案
一种解决方案可能是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。
推荐阅读
- java - 无法通过 SSH 执行 Cutrite 命令
- python - 按多个条件删除行
- javascript - Javascript向对象键添加值:值将其值1加1
- linux - 构建期间无法在 RPI 上运行 Dockerfile 中的任何命令
- azure-active-directory - Azure AD 提供 refresh_token 即使我没有请求并且权限没有offline_access
- javascript - 如何在 https node.js 中使用 while 循环
- javascript - 将 tiktok 视频嵌入 Angular 7 的问题
- python - Spacy 3 对命名实体识别的置信度得分
- asp.net-core - 令牌端点的 HTTP 请求无效 - IdentityServer4 ASP.Net Core 5.0
- flutter - 如何在 ElevatedButton 中使用 textTheme?