- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在 tensorflow API docs他们使用名为 logits
的关键字。它是什么?很多方法都是这样写的:
tf.nn.softmax(logits, name=None)
如果logits
只是一个通用的Tensor
输入,为什么叫logits
?
其次,下面两种方法有什么区别?
tf.nn.softmax(logits, name=None)
tf.nn.softmax_cross_entropy_with_logits(logits, labels, name=None)
我知道 tf.nn.softmax
做什么,但不知道另一个。举个例子会很有帮助。
最佳答案
softmax+logits 仅仅意味着该函数对早期层的未缩放输出进行操作,并且理解单位的相对比例是线性的。特别是,这意味着输入的总和可能不等于 1,即这些值是 not 概率(您的输入可能为 5)。在内部,它首先将 softmax 应用于未缩放的输出,然后计算这些值与它们“应该”由标签定义的交叉熵。
tf.nn.softmax
产生应用 softmax function 的结果到输入张量。 softmax 将输入“压扁”,使 sum(input) = 1
,它通过将输入解释为对数概率(logits)然后将它们转换回 0 到 0 之间的原始概率来进行映射1. softmax的输出形状与输入相同:
a = tf.constant(np.array([[.1, .3, .5, .9]]))
print s.run(tf.nn.softmax(a))
[[ 0.16838508 0.205666 0.25120102 0.37474789]]
见 this answer详细了解为什么在 DNN 中广泛使用 softmax。
tf.nn.softmax_cross_entropy_with_logits
将 softmax 步骤与应用 softmax 函数后的交叉熵损失的计算相结合,但它以更数学上更谨慎的方式将这一切结合在一起。结果类似于:
sm = tf.nn.softmax(x)
ce = cross_entropy(sm)
交叉熵是一个汇总度量:它对元素求和。 tf.nn.softmax_cross_entropy_with_logits
在形状 [2,5]
张量上的输出是形状 [2,1]
(第一维被视为批处理)。
如果您想进行优化以最小化交叉熵并且您在最后一层之后进行 softmaxing,您应该使用 tf.nn.softmax_cross_entropy_with_logits
而不是这样做你自己,因为它以数学上正确的方式涵盖了数值不稳定的极端情况。否则,你最终会通过到处添加小 epsilon 来破解它。
于 2016 年 2 月 7 日编辑:如果您有单类标签,其中一个对象只能属于一个类,您现在可以考虑使用 tf.nn.sparse_softmax_cross_entropy_with_logits
这样您就不必将标签转换为密集标签-热阵列。此功能是在 0.6.0 版本之后添加的。
关于python - 什么是逻辑? softmax 和 softmax_cross_entropy_with_logits 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34240703/
如前所述 here ,交叉熵不是多标签分类的合适损失函数。我的问题是“这个事实是否也适用于 softmax 的交叉熵?”。如果是,如何与this part匹配的文件。 我应该提到我的问题的范围在cnt
这两个函数之间的区别已在这篇 pytorch 帖子中描述:What is the difference between log_softmax and softmax? 是:exp(x_i) / ex
我正在使用 tensorflow 编写一个简单的逻辑回归。我发现当使用 tf.nn.softmax 时,算法收敛得更快,最终精度更高。如果切换到我自己的 softmax 实现,网络收敛速度较慢,最终精
使用 softmax 作为 tf.keras 中的连续层和使用 softmax 作为密集层的激活函数有什么区别? tf.keras.layers.Dense(10, activation=tf.nn.
keras.activations.softmax 和 keras.layers.Softmax 之间有什么区别?为什么同一个激活函数有两种定义? keras.activations.softmax:
我正在使用带有二进制交叉熵的 Sigmoid 激活函数训练一个二进制分类器,它提供了大约 98% 的良好准确度。 当我使用带有 categorical_crossentropy 的 softmax 进
我正在尝试实现类似完全卷积网络的东西,其中最后一个卷积层使用过滤器大小 1x1 并输出“分数”张量。分数张量的形状为 [Batch, height, width, num_classes]。 我的问题
我目前正在用 Java 实现我自己的神经网络。我已经实现了一些常见的激活函数,例如 Sigmoid 或 ReLU,但我不知道如何实现 Softmax。 我想要一个像这样的方法 private doub
我目前正在用 Java 实现我自己的神经网络。我已经实现了一些常见的激活函数,例如 Sigmoid 或 ReLU,但我不知道如何实现 Softmax。 我想要一个像这样的方法 private doub
我在 github 上找到了一个很好的强化学习示例,我想使用它。我的问题是输出是正态分布层(下面的代码),因为它用于连续 Action 空间,而我想将它用于离散 Action 空间,其中模型有 4 个
我已经学习了 ML,并且一直在 Andrew N.G 的 coursera 类(class)中学习 DL,每次他谈到线性分类器时,权重都只是一个一维向量。即使在分配期间,当我们将图像滚动到一维向量(像
我一直在研究斯坦福的深度学习教程,但我在其中一个练习(带有 softmax 输出层的神经网络)上遇到了问题。这是我在 R 中的实现: train <- function(training.set, l
我正在 Octave 中实现 softmax 回归。目前,我正在使用使用以下成本函数和导数的非矢量化实现。 来源:Softmax Regression 现在我想在 Octave 中实现它的矢量化版本。
我是机器学习的新手,正在学习如何在 python 中实现 softmax,我正在关注以下线程 Softmax function - python 我在做一些分析,如果我们有一个数组 batch = n
下面是我尝试计算 softmax 的一小段代码。它适用于单个阵列。但是对于更大的数字,比如 1000 等,它会爆炸 import numpy as np def softmax(x): print
例如,我有一个 CNN,它试图从 MNIST 数据集(使用 Keras 编写的代码)中预测数字。它有 10 个输出,形成 softmax 层。只有一个输出可以为真(独立于 0 到 9 的每个数字):
pytorch教程 ( https://pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html#sphx-glr-beginner-bli
我找到了一些 MNIST 手写字符分类问题的示例代码。代码开头如下: import tensorflow as tf # Load in the data mnist = tf.keras.datas
这是 Keras 模型的最后一层。 model.add(Dense(3, activation='softmax')) model.compile(loss='categorical_crossent
在神经网络的输出层中,通常使用softmax函数来近似概率分布: 由于指数的原因,计算成本很高。为什么不简单地执行 Z 变换,使所有输出均为正,然后通过将所有输出除以所有输出之和来进行归一化? 最佳答
我是一名优秀的程序员,十分优秀!