首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >sklearn的log_loss给nan,而tensorflow.losses.log_loss工作

sklearn的log_loss给nan,而tensorflow.losses.log_loss工作
EN

Stack Overflow用户
提问于 2018-05-03 14:37:25
回答 2查看 2K关注 0票数 3

我有一个二元分类问题。我正在使用来自tensorflow.losses.log_losstensorflow.losses.log_loss

为了检查,我使用sklearn.metrics.log_loss。大多数情况下,这两个函数给出相同的结果(仅在dtype上不同)。在某些情况下,sklearn函数返回NaN,而tf.losses.log_loss返回正确的值。

数据在这里:https://pastebin.com/BvDgDnVT

代码:

代码语言:javascript
运行
复制
import sklearn.metrics
import tensorflow as tf
y_true = [... see pastebin link]
y_pred = [... see pastebin link]
loss_sk = sklearn.metrics.log_loss(y_true, y_pred, labels=[0, 1]) # -> returns NaN
with tf.Session() as sess:
    loss_tf = tf.losses.log_loss(y_true, y_pred).eval(session=sess) # -> returns 0.0549

似乎出现了一些log(0),但是为什么tensorflow没有这个问题呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-03 21:50:03

将两个数组的dtype更改为64位浮点数。

代码语言:javascript
运行
复制
dtype=np.float64

例如,添加y_pred = y_pred.astype(np.float64)

票数 6
EN

Stack Overflow用户

发布于 2020-02-20 10:43:48

解决这个问题的另一种方法是向eps=1e-7提供log_loss,这是float32更合适的epsilon,也是tensorflow使用的。但是,Scikit使用1e-15作为缺省值(预期为float64)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50157689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档