softmax_cross_entropy_with_logits和loss.log_loss有什么区别?

2024-04-28

之间的主要区别是什么tf.nn.softmax_cross_entropy_with_logits and tf.losses.log_loss?两种方法都接受 1-hot 标签和 logits 来计算分类任务的交叉熵损失。


这些方法在理论上并没有太大不同,但在实现上有许多差异:

1) tf.nn.softmax_cross_entropy_with_logits是为单类标签设计的,而tf.losses.log_loss可用于多类分类。tf.nn.softmax_cross_entropy_with_logits如果您提供多类标签,则不会抛出错误,但是您的梯度将无法正确计算,并且训练很可能会失败。

来自官方文档:

注意:虽然这些类别是互斥的,但它们的概率不一定是互斥的。所需要的只是每行标签都是有效的概率分布。如果不是,梯度的计算将不正确。

2) tf.nn.softmax_cross_entropy_with_logits首先在预测之上计算(从名称中可以看出)soft-max 函数,而 log_loss 不会执行此操作。

3) tf.losses.log_loss从某种意义上说,具有更广泛的功能,您可以对损失函数的每个元素进行加权,或者可以指定epsilon,用于计算,以避免 log(0) 值。

4)最后,tf.nn.softmax_cross_entropy_with_logits返回批次中每个条目的损失,同时tf.losses.log_loss返回减少的(默认情况下所有样本的总和)值,可以直接在优化器中使用。

UPD:另一个区别是计算损失的方式,对数损失考虑负类(向量中有 0 的那些)。简而言之,交叉熵损失迫使网络为正确的类产生最大的输入,并且不关心负类。对数损失同时完成这两个任务,它迫使正确的类具有更大的值和更小的负值。用数学表达式表示如下:

交叉熵损失:

对数损失:

其中i是对应的类。

例如,如果您有 labels=[1,0] 且 Predictions_with_softmax = [0.7,0.3],则:

1) 交叉熵损失:-(1 * log(0.7) + 0 * log(0.3)) = 0.3567

2)对数损失: - (1*log(0.7) + (1-1) * log(1 - 0.7) +0*log(0.3) + (1-0) log (1- 0.3)) = - (log (0.7) + 对数 (0.7)) = 0.7133

然后如果您使用默认值tf.losses.log_loss然后你需要划分log_loss输出非零元素的数量(这里是 2)。所以最后:tf.nn.log_loss = 0.7133 / 2 = 0.3566

在这种情况下,我们得到了相等的输出,但情况并非总是如此

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

softmax_cross_entropy_with_logits和loss.log_loss有什么区别? 的相关文章

随机推荐

  • R语言赋值

    我想知道 R 语言中的赋值是如何工作的 考虑以下 R shell 会话 gt x lt c 5 6 7 gt x 1 lt 10 gt x 1 10 6 7 gt 我完全理解 创建向量 5 6 7 并将其绑定到 符号 x 之后 x 会反弹到
  • Objective-C 类别导致无法识别的选择器

    我的项目有一个UIImage我想从另一个类调用的类别函数 我正确导入了图像类别的头文件 并且在没有警告的情况下编译了项目 问题是当我打电话时UIImage类别函数我看到一个无法识别的选择器错误NSInvalidArgumentExcepti
  • 缺少 /var/lib/mysql/mysql.sock 文件

    我正在尝试访问 mysql 当我运行 mysql 命令时 我得到以下信息 root ip 10 229 65 166 tpdatabase 1 8 0 28356 mysql 错误 2002 HY000 无法连接到 通过socket本地My
  • 如何在 NavHostFragment 中检索当前片段?

    我试图在新的导航组件中找到一种方法 但我没有找到任何相关内容 我当前的目的地是 mainHostFragment findNavController currentDestination 但我无法获得对显示片段的任何引用 参考显示的片段 A
  • 仅使用 fprintf 和 fscanf 替换文本文件中的字符串

    抱歉问这么简单的问题 这是我作业的一部分 我被困住了 如你看到的 include
  • Spring中需要多个相同类型的bean

    将其标记为重复之前的请求 我浏览了论坛 但在任何地方都找不到该问题的解决方案 我正在使用 Spring 3 2 编写代码 一切都是纯粹基于注释的 该代码接收从不同 XSD 文件派生的 XML 文件 所以我们可以说 有五个不同的 XSD A1
  • 在 Python 中使用 argparse 处理无效参数

    我在用argparse https docs python org 2 library argparse html解析命令行参数 默认情况下 在收到无效参数时 它会打印帮助消息并退出 是否可以自定义 argparse 在收到无效参数时的行为
  • Nonetype 错误/使用 python 的 beautifulsoup 没有打印任何元素

    所以我尝试使用 python 比较 2 个列表 其中一个包含我从网站获取的 1000 个链接 另一个包含一些单词 这些单词可能包含在第一个列表的链接中 如果是这种情况 我想得到一个输出 我打印了第一个列表 它确实有效 例如 如果链接是 ht
  • Powershell CMD.exe 和路径中的空格

    我在使用执行命令时遇到问题cmd exe在 PowerShell 中 问题是命令的路径中有空格 似乎是 PowerShell 的普遍问题 以下是摘录 base dir resolve path this path has spaces in
  • 有没有办法查看 Docker for Windows 上的容器磁盘使用情况?

    我很好奇除了作为容器映像一部分的层之外 是否还有一种方法可以查看正在运行的 Windows 容器使用了多少磁盘空间 基本上 容器自创建以来 增长 了多少 在 Linux 或在 HyperV 中运行的 Linux 容器 中 这将是docker
  • 熊猫在移动的数据帧上滚动

    这是一段代码 我不明白为什么在最后一列 rm 5 上 前 4 项得到 NaN 我知道对于 rm 列 前 4 项未填充 因为没有可用数据 但如果我移动列计算 应该进行 不是吗 同样 我不明白为什么 rm 5 列中有 5 个而不是 4 个项目是
  • AWS 上的多租户应用程序 - 多个 SSL 证书安装策略

    我正在为 Rails 多租户应用程序做一些规划 并且想知道处理自定义域证书的最佳方法是什么 应用程序是相当沼泽标准 ELB 应用程序服务器和多租户数据库 在我当前的用例中 每个租户都有一个自己独有的应用程序子域 这通常是通过通配符证书来处理
  • 使用 UIWebView loadRequest 的常规块 56、1024、8、244、24 内存泄漏

    我遇到了内存泄漏 但无法通过泄漏 构建 分析或整体检查来找出如何修复 我有一个非常强烈的想法 这是由于我的 UIWebview 加载 JavaScript 的 loadRequest 命令造成的 但我不知道出了什么问题 这是我的设置 我有一
  • Android WebView - 带有经过身份验证的代理

    我目前正在尝试调试围绕 WebView 构建的 Android 应用程序 我负责处理的开发网络环境 不是我的选择 这是 企业 安全决策 是WPA WiFi 代理服务器 代理身份验证 虽然a上的说明以前的答案非常有帮助 https stack
  • 在通用 C# 类中链接隐式运算符

    对于以下通用 C 类 我想将 T 转换为 K public abstract class ValueType
  • 哪种 jQuery 选择方法更快?

    我想知道使用 jQuery 进行选择时使用上下文参数与使用普通 CSS 范围选择器相比是否有任何优势 假设我有这个 html div class contacts h1 All contacts h1 div class contact n
  • 如何在流体宽度容器中将左侧、中间和右侧的三个按钮放置在同一行?

    我在用着LESS在 Twitter Bootstrap 环境中 但我会直接接受CSS也有答案 Fluid width container Btn1 Btn2 Btn3 另一种宽度 Fluid width container Btn1
  • 关于线程的停止

    我开发了一个代码 它将在执行时启动两个线程 public class MyThread1 extends Thread extend thread class public synchronized void run synchronize
  • 为什么在比较范围内的数字时会在汇编代码中发生分支?

    我正在读书this https stackoverflow com questions 17095324 fastest way in c to determine if an integer is between two integers
  • softmax_cross_entropy_with_logits和loss.log_loss有什么区别?

    之间的主要区别是什么tf nn softmax cross entropy with logits and tf losses log loss 两种方法都接受 1 hot 标签和 logits 来计算分类任务的交叉熵损失 这些方法在理论上