TensorFlow 2中的Softmax和Sigmoid身份

时间:2019-07-19 11:27:48

标签: python python-3.x tensorflow

我知道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]

据我了解,它们应该得到相同的结果。从数学上讲,我得出以下结论(再次是交叉熵):

enter image description here

这些结果也来自上述功能,但显然不相同。有人可以解决这种矛盾吗?

(我知道thisthis这是个问题。)

0 个答案:

没有答案