Keras 自定义二元交叉熵损失函数。获取 NaN 作为损失的输出

2024-01-08

我尝试编写一个自定义的二元交叉熵损失函数。 这是我的脚本:

def my_custom_loss(y_true,y_pred):
    t_loss = (-1)*(y_true * K.log(y_pred) + (1 - y_true) * K.log(1 - y_pred))
    return K.mean(t_loss)

当我使用此损失函数运行脚本时,经过几次迭代后,我得到 NaN 作为损失函数的输出。

然后我查看了TensorFlow文档,我将损失函数修改为以下内容:

 t_loss = K.max(y_pred,0)-y_pred * y_true + K.log(1+K.exp((-1)*K.abs(y_pred)))

代码运行没有任何问题。 我想知道是否有人可以解释为什么我的第一个损失函数给出 NaN 输出。

二元交叉熵: y * log(p) + (1-y) * log(1-p)

我有 sigmoid 函数作为最后一层的激活。 因此“p”的值应在 0 和 1 之间。此范围内应存在对数。

谢谢。


二元交叉熵的简单实现将在 0 输出或大于 1 输出时遇到数值问题,例如log(0) -> NaN。您发布的公式已重新表述为ensure stability and avoid underflow。以下推导来自tf.nn.sigmoid_cross_entropy_with_logits https://www.tensorflow.org/api_docs/python/tf/nn/sigmoid_cross_entropy_with_logits.

z * -log(sigmoid(x)) + (1 - z) * -log(1 - sigmoid(x))
= z * -log(1 / (1 + exp(-x))) + (1 - z) * -log(exp(-x) / (1 + exp(-x)))
= z * log(1 + exp(-x)) + (1 - z) * (-log(exp(-x)) + log(1 + exp(-x)))
= z * log(1 + exp(-x)) + (1 - z) * (x + log(1 + exp(-x))
= (1 - z) * x + log(1 + exp(-x))
= x - x * z + log(1 + exp(-x))

对于 x

x - x * z + log(1 + exp(-x))
= log(exp(x)) - x * z + log(1 + exp(-x))
= - x * z + log(1 + exp(x))

并且实现使用等效的形式:

max(x, 0) - x * z + log(1 + exp(-abs(x)))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Keras 自定义二元交叉熵损失函数。获取 NaN 作为损失的输出 的相关文章

  • 使用 python requests 模块时出现 HTTP 503 错误

    我正在尝试发出 HTTP 请求 但当前可以从 Firefox 浏览器访问的网站响应 503 错误 代码本身非常简单 在网上搜索一番后我添加了user Agent请求参数 但也没有帮助 有人能解释一下如何消除这个 503 错误吗 顺便说一句
  • Django 的内联管理:一个“预填充”字段

    我正在开发我的第一个 Django 项目 我希望用户能够在管理中创建自定义表单 并向其中添加字段当他或她需要它们时 为此 我在我的项目中添加了一个可重用的应用程序 可在 github 上找到 https github com stephen
  • 元组有什么用?

    我现在正在学习 Python 课程 我们刚刚介绍了元组作为数据类型之一 我阅读了它的维基百科页面 但是 我无法弄清楚这种数据类型在实践中会有什么用处 我可以提供一些需要一组不可变数字的示例吗 也许是在 Python 中 这与列表有何不同 每
  • 如何用python脚本控制TP LINK路由器

    我想知道是否有一个工具可以让我连接到路由器并关闭它 然后从 python 脚本重新启动它 我知道如果我写 import os os system ssh l root 192 168 2 1 我可以通过 python 连接到我的路由器 但是
  • 跟踪 pypi 依赖项 - 谁在使用我的包

    无论如何 是否可以通过 pip 或 PyPi 来识别哪些项目 在 Pypi 上发布 可能正在使用我的包 也在 PyPi 上发布 我想确定每个包的用户群以及可能尝试积极与他们互动 预先感谢您的任何答案 即使我想做的事情是不可能的 这实际上是不
  • 独立滚动矩阵的行

    我有一个矩阵 准确地说 是 2d numpy ndarray A np array 4 0 0 1 2 3 0 0 5 我想滚动每一行A根据另一个数组中的滚动值独立地 r np array 2 0 1 也就是说 我想这样做 print np
  • 您可以格式化 pandas 整数以进行显示,例如浮点数的“pd.options.display.float_format”?

    我见过this https stackoverflow com questions 18404946 py pandas formatdataframe and this https stackoverflow com questions
  • Pandas Merge (pd.merge) 如何设置索引和连接

    我有两个 pandas 数据框 dfLeft 和 dfRight 以日期作为索引 dfLeft cusip factorL date 2012 01 03 XXXX 4 5 2012 01 03 YYYY 6 2 2012 01 04 XX
  • Python,将函数的输出重定向到文件中

    我正在尝试将函数的输出存储到Python中的文件中 我想做的是这样的 def test print This is a Test file open Log a file write test file close 但是当我这样做时 我收到
  • “隐藏”内置类对象、函数、代码等的名称和性质[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我很好奇模块中存在的类builtins无法直接访问的 例如 type lambda 0 name function of module
  • Docker 中的 Python 日志记录

    我正在 Ubuntu Web 服务器上的 Docker 容器中测试运行 python 脚本 我正在尝试查找由 Python Logger 模块生成的日志文件 下面是我的Python脚本 import time import logging
  • pyspark 将 twitter json 流式传输到 DF

    我正在从事集成工作spark streaming with twitter using pythonAPI 我看到的大多数示例或代码片段和博客是他们从Twitter JSON文件进行最终处理 但根据我的用例 我需要所有字段twitter J
  • Numpy - 根据表示一维的坐标向量的条件替换数组中的值

    我有一个data多维数组 最后一个是距离 另一方面 我有距离向量r 例如 Data np ones 20 30 100 r np linspace 10 50 100 最后 我还有一个临界距离值列表 称为r0 使得 r0 shape Dat
  • Jupyter Notebook 找不到 Python 模块

    不知道发生了什么 但每当我使用 ipython 氢 原子 或 jupyter 笔记本时都找不到任何已安装的模块 我知道我安装了 pandas 但笔记本说找不到 我应该补充一点 当我正常运行脚本时 python script py 它确实导入
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • 使用特定颜色和抖动在箱形图上绘制数据点

    我有一个plotly graph objects Box图 我显示了箱形 图中的所有点 我需要根据数据的属性为标记着色 如下所示 我还想抖动这些点 下面未显示 Using Box我可以绘制点并抖动它们 但我不认为我可以给它们着色 fig a
  • 如何应用一个函数 n 次? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 假设我有一个函数 它接受一个参数并返回相同类型的结果 def increment x return x 1 如何制作高阶函数repeat可以
  • Pandas 每周计算重复值

    我有一个Dataframe包含按周分组的日期和 ID df date id 2022 02 07 1 3 5 4 2022 02 14 2 1 3 2022 02 21 9 10 1 2022 05 16 我想计算每周有多少 id 与上周重
  • Keras:多类 NLP 任务中 model.evaluate 与 model.predict 的准确性差异

    我正在使用以下代码在 keras 中为 NLP 任务训练一个简单模型 训练集 测试集和验证集的变量名称是不言自明的 该数据集有 19 个类 因此网络的最后一层有 19 个输出 标签也是 one hot 编码的 nb classes 19 m
  • 更改 Tk 标签小部件中单个单词的颜色

    我想更改 Tkinter 标签小部件中单个单词的字体颜色 我知道可以使用文本小部件来实现与我想要完成的类似的事情 例如使单词 YELLOW 显示为黄色 self text tag config tag yel fg clr yellow s

随机推荐

  • Freebase 查询 - 排除某些值

    我想检索所有电影的名称及其类型 如果有关流派的信息为空也没关系 但如果流派已知 我想检索它 film film genre id null optional optional 但我对同性恋色情不感兴趣 所以我想排除所有类型为 en gay
  • startManagingCursor(cursor) 已弃用的方法

    我使用了这段代码 Cursor c cr query message null null null null startManagingCursor c But startManagingCursor c 是一个已弃用的方法 我怎样才能更换
  • C++ 枚举的基础类型是什么?

    这可能已经在其他地方得到了回答 但我找不到合适的答案 我有这个代码 enum enumWizardPage WP NONE 0x00 WP CMDID 0x01 WP LEAGUES 0x02 WP TEAMS 0x04 WP COMP 0
  • Delphi 服务应用程序随机崩溃

    我有一个德尔福服务应用程序 Indy TCP 服务器和许多客户端 最多 50 个 到 Firebird 的 ADO 连接和简单的网络交换 应用程序在下一个事件 例如 中随机崩溃 可能在 7 天后工作 可能是 1 小时 文件 rollcont
  • CSS 重叠箭头

    我正在尝试仅使用 CSS3 来完成与下图非常非常相似的事情 唯一的区别是最后一个 div 有一个尖头 在我寻找类似适应的东西时 我遇到了这个 js 小提琴 http jsfiddle net amkrtchyan eju9r 14 这非常接
  • GuestAdditions 版本不匹配

    当我使用这个命令时 vagrant up 我收到此错误 machine1 GuestAdditions versions on your host 4 3 36 and guest 5 0 10 do not match 如何从 ubunt
  • Kotlin 中线程和协程的区别

    Kotlin 中是否存在与其他语言的协程实现不同的特定语言实现 协程就像轻量级线程是什么意思 有什么不同 Kotlin 协程实际上是并行 并发 运行的吗 即使在多核系统中 在任何给定时间都只有一个协程在运行吗 这里我启动了 100 000
  • 如何通过南迁在现有模型中添加一对一的关系字段

    我已经有模型了 class ModelA models Model name models CharField max length 255 blank False 我里面有很多条目 现在我想在其中添加一个字段 即 user models
  • 修改R包数据

    bio infer 包包含需要修改的数据框 usr lib R library bio infer data itis ttable rda 加载 bio infer 包并附加数据框后 data 函数 我使用 write table 将数据
  • swift 3 准备(for segue: )功能损坏? [复制]

    这个问题在这里已经有答案了 由于某些奇怪的原因 对于 swift 3 prepare for segue 方法拒绝确认 segue 标识符 我将以下 IBAction 连接到 UI 上的几个按钮 IBAction func goToImag
  • 如何在 Spring Boot 中创建单个可执行战争

    我们正在使用 Spring Boot 开发 Spring Cloud 项目 我们的目标是创建一个可以使用 java jar 运行的可执行 war 我关注了 SO 上的几篇文章 并能够通过 1 在 2 在 spring boot maven
  • “零复制网络”与“内核绕过”?

    零拷贝网络 和 内核绕过 有什么区别 这两个短语的意思是相同还是不同 内核绕过是 零复制网络 中使用的技术吗 这就是关系吗 零拷贝网络 和 内核绕过 有什么区别 这两个短语的意思是相同还是不同 内核绕过是 零复制网络 中使用的技术吗 这就是
  • 使用给定键的所有多重映射值填充向量

    Given a multimap
  • Angular2如何在生产模式和测试模式之间切换baseURL

    您好 我目前正在开发模式下测试我的应用程序 并且全局设置了 baseURL 但现在我想启用生产模式 并且我想在生产模式下使用不同的 baseURL 并在两种模式 开发模式和生产模式 之间切换两个 baseURL 我怎样才能做到这一点 我正在
  • 在控制台模式下从另一个 install4j 安装程序中启动 install4j 安装程序

    我有一个安装程序 A 当它运行时 它会使用 运行可执行文件或批处理文件 操作启动安装程序 B 在 GUI 模式下运行良好 但是 在无头 Ubuntu 上 或传递 c 标志 安装会挂起 查看安装程序 B 的日志文件 它似乎正在尝试运行 欢迎屏
  • 如何将整数变量传递到vba公式中

    我编写的这段代码遇到了一些问题 Sub lol Dim counter As Integer counter 1 Do Until Selection Value Dim ws As Worksheet Sheets Row1 Copy a
  • 获取文件发送到回收站的日期

    是否有任何调用可以获取文件发送到回收站的日期 项目对象位于Shell32给出lastmodified日期 但不是发送到回收站的时间 我希望能够恢复在特定日期删除的文件 好的 和往常一样 当您知道如何操作时 这非常简单 我以为这将是文件的属性
  • `std::tuple_size_v` 在不同编译器上的不同 SFINAE 行为

    考虑这段代码 include
  • 如何通过 unixstamp 获取过去 24 小时的行数

    我有这个 long 86400 query SELECT FROM users WHERE unixdate UNIX TIMESTAMP long ORDER BY unixdate DESC 但这不起作用 我想在 24 小时内向所有新用
  • Keras 自定义二元交叉熵损失函数。获取 NaN 作为损失的输出

    我尝试编写一个自定义的二元交叉熵损失函数 这是我的脚本 def my custom loss y true y pred t loss 1 y true K log y pred 1 y true K log 1 y pred return