- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习 tensorflow 并希望将 tensorflow 实现与数学联系起来。
据我所知,数学交叉熵要求其输入的总和为 1。在以下代码中,y_true
是有效输入,而 y_pred
不是数学上有效的输入:
y_true = [[0, 1]]
y_pred = [[1.0, 20.0]]
print(tf.keras.losses.CategoricalCrossentropy(from_logits=False).call(y_true, y_pred))
print(tf.keras.losses.CategoricalCrossentropy(from_logits=True).call(y_true, y_pred))
给出:
tf.Tensor([0.04879016], shape=(1,), dtype=float32)
tf.Tensor([0.], shape=(1,), dtype=float32)
请找到要点
here .
if from_logits=False, means the input is a probability
from_logits=True
means the input to crossEntropy layer is normaltensor/logits
"Another name for
raw_predictions
in the above code islogit
from_logits
,我猜,意味着输入是
raw_predictions
.
from_logits=True
,但我得到的结果是 0。
最佳答案
标签之间的交叉熵[[0, 1]]
和登录 [[1, 20]]
应该是一个非常接近 0 的值(并且由于浮点不精确,某些输出可能将其表示为零)。表示为概率,这些 logits 将约为 [[0.000000005, 1]]
.请注意这些概率与标签的接近程度。因此交叉熵应该非常低。
正如 OP 在他们的问题中指出的那样,from_logits=True
在未缩放的输出上操作时应使用。实际上,from_logits=True
如果在 softmax 之前对输出进行操作,则使用。 Softmax 将未缩放的输出映射到概率。要计算这些概率的交叉熵,from_logits=False
应该使用。
下面是一个例子:
import tensorflow as tf
y_true = tf.convert_to_tensor([[0, 1]], "float32")
y_pred = tf.convert_to_tensor([[1, 20]], "float32")
ce_logits_fn = tf.keras.losses.CategoricalCrossentropy(from_logits=True)
ce_probs_fn = tf.keras.losses.CategoricalCrossentropy(from_logits=False)
print(ce_logits_fn(y_true, y_pred))
# tf.Tensor(0.0, shape=(), dtype=float32)
print(ce_probs_fn(y_true, tf.nn.softmax(y_pred)))
# tf.Tensor(1.1920929e-07, shape=(), dtype=float32)
尝试将预测更接近。在上面的例子中,正确类的值远高于错误类的值,因此交叉熵会很低。
import tensorflow as tf
y_true = tf.convert_to_tensor([[0, 1]], "float32")
y_pred = tf.convert_to_tensor([[5, 7]], "float32")
ce_logits_fn = tf.keras.losses.CategoricalCrossentropy(from_logits=True)
ce_probs_fn = tf.keras.losses.CategoricalCrossentropy(from_logits=False)
print(ce_logits_fn(y_true, y_pred))
# tf.Tensor(0.12692805, shape=(), dtype=float32)
print(ce_probs_fn(y_true, tf.nn.softmax(y_pred)))
# tf.Tensor(0.126928, shape=(), dtype=float32)
关于python - from_logits=True 但损失为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66941619/
我正在用 unet 做图像语义分割工作,如果我像这样为最后一层设置 Softmax Activation: ... conv9 = Conv2D(n_classes, (3,3), padding =
我正在学习 tensorflow 并希望将 tensorflow 实现与数学联系起来。 据我所知,数学交叉熵要求其输入的总和为 1。在以下代码中,y_true是有效输入,而 y_pred不是数学上有效
我有一个多标签分类,其中每个目标都是一个由 1 和 0 组成的向量 不是 相互排斥(为了清楚起见,我的目标是类似 [0, 1, 0, 0, 1, 1, ... ] 的东西)。 到目前为止我的理解是:
在 Tensorflow 2.0 中, 有一个损失函数叫做 tf.keras.losses.sparse_categorical_crossentropy(labels, targets, from_
我是一名优秀的程序员,十分优秀!