我知道S型函数与softmax函数具有两个类别(K=5
)。但是我不明白为什么TensorFlow 2在这里给我不同的结果,在这里我将自底向上的交叉熵计算与Tensorflow的交叉熵函数进行了比较:
print('SIGMOID')
a = tf.convert_to_tensor([1, 1], dtype='float32')
b = tf.convert_to_tensor([0.6, 0.4])
print(tf.nn.sigmoid_cross_entropy_with_logits(labels=a, logits=b))
print(-tf.math.log(tf.math.sigmoid(b)))
# both yield: [0.43748793 0.5130153]
print('SOFTMAX')
a = tf.convert_to_tensor([[1, 0],[1, 0]], dtype='float32') # one-hot
b = tf.convert_to_tensor([[0.6, 0.4],[0.4, 0.6]])
print(tf.nn.softmax_cross_entropy_with_logits(labels=a, logits=b))
print(-tf.math.log(tf.nn.softmax(tf.convert_to_tensor([0.6,0.4]))))
# both yield [0.59813887 0.79813886]
据我了解,它们应该得到相同的结果。从数学上讲,我得出以下结论(再次是交叉熵):
这些结果也来自上述功能,但显然不相同。有人可以解决这种矛盾吗?