我正在学习逻辑回归,我想通过梯度下降来计算交叉熵损失函数在最小化过程中的值,但当我使用tensorflow的sigmoid_cross_entropy_with_logits函数时,我会得到与我自己的表达式不同的结果。
这里有一个例子:
import numpy as np
import tensorflow as tf
pred = np.array([[0.2],[0.3],[0.4]])
test_y = np.array([[0.5],[0.6],[0.7]])
print(tf.nn.sigmoid_cross_entropy_with_logits(logits = pred, labels = test_y))
print(-test_y * tf.math.log(pred) - (1-test_y) * tf.math.log(1-pred))
输出:
tf.Tensor(
[[0.69813887]
[0.67435524]
[0.63301525]], shape=(3, 1), dtype=float64)
tf.Tensor(
[[0.91629073]
[0.86505366]
[0.7946512 ]], shape=(3, 1), dtype=float64)
有人能向我解释一下这是怎么回事吗?我查看了tensorflow文档中关于它们的函数,它似乎应该和我的表达式完全一样。
在计算交叉熵损失之前,您忘记了采用预测pred
的S形:
-test_y * tf.math.log(tf.math.sigmoid(pred)) - (1-test_y) * tf.math.log(1-tf.math.sigmoid(pred))
tf.Tensor(
[[0.69813887]
[0.67435524]
[0.63301525]], shape=(3, 1), dtype=float64)