python-3.x - sklearn 的 log_loss 给出了 nan,而 tensorflow.losses.log_loss 有效
问题描述
我有一个二元分类问题。我正在使用来自tensorflow.losses.log_loss
.
要检查,我使用sklearn.metrics.log_loss
. 大多数时候,这两个函数给出相同的结果(只有 dtype 不同)。在某些情况下,sklearn
函数在返回正确值的NaN
同时返回。tf.losses.log_loss
数据在这里: https ://pastebin.com/BvDgDnVT
代码:
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没有这个问题呢?
解决方案
将两个数组的 dtype 更改为 64 位浮点数可以修复它
dtype=np.float64
例如添加y_pred = y_pred.astype(np.float64)
推荐阅读
- json - 将数据传递到服务器 Xamarin JSON
- botframework - Microsoft Bot Framework 和 Microsoft Teams
- c# - 当我的 .NET 代码返回一个任务时,它并没有达到预期的结果。将其更改为异步/等待,修复它。为什么?
- python - 如何使用一个命令行运行 Python 包
- xamarin - Xamarin:检测在 NavigationRenderer 上推送的页面
- mysql - 如何加快 MySQL 百万行的插入速度?
- python - 平均图像 ROI 中的像素
- javascript - 如何从数组中找到数组中的特定元素
- dart - 颤振流不听或检测到变化
- java - Spring的application.properties中应该转义哪些字符?