tensorflow 中的 cross_entropy

文章目录

  • tf.nn.sigmoid_cross_entropy_with_logits
    • 自己手写一个计算方式如下
    • 对比计算直接调用的结果
    • 输入输出形状
  • tf.nn.softmax_cross_entropy_with_logits
    • 手写计算方式
    • 对比直接调用结果
  • tf.nn.sparse_softmax_cross_entropy_with_logits

tf.nn.sigmoid_cross_entropy_with_logits

BinaryCrossentropy这个函数不接受整数的数据类型。
在这里插入图片描述labels 和 logits 中的每一个值一一对应计算了 cross_entropy 值。
输入的 logit 并不在 0,1 之间,而是会经过内部的 sigmoid 转换为概率,介于 0,1 之间。

z * -log(sigmoid(x)) + (1 - z) * -log(1 - sigmoid(x))
= z * -log(1 / (1 + exp(-x))) + (1 - z) * -log(exp(-x) / (1 + exp(-x)))
= z * log(1 + exp(-x)) + (1 - z) * (-log(exp(-x)) + log(1 + exp(-x)))
= z * log(1 + exp(-x)) + (1 - z) * (x + log(1 + exp(-x))
= (1 - z) * x + log(1 + exp(-x))
= x - x * z + log(1 + exp(-x))

自己手写一个计算方式如下

def sigmoid(x):return np.log(1/ (1 + np.exp(-x)) )def cross_entropy(logit, label):ent = label * sigmoid(logit) + (1-label) * (1 - sigmoid(logit))return ent
cross_entropy(1, 0)

对比计算直接调用的结果

logits = tf.constant([[1., -1., 0., 1., -1., 0., 0.], [1., -1., 0., 1., -1., 0., 0.]])
labels = tf.constant([[0., 0., 0., 1., 1., 1., 0.5], [0., 0., 0., 1., 1., 1., 0.5]])
tf.nn.sigmoid_cross_entropy_with_logits(labels=labels, logits=logits).numpy()

输入输出形状

必须一一对应,完全一样。

tf.nn.softmax_cross_entropy_with_logits

softmax_cross_entropy_with_logits 适合处理多分类的情况,但是需要是 soft_multiclass_labels 的形式。
在这里插入图片描述

手写计算方式

def softmax_cross_entropy(logits, labels):probs = tf.nn.softmax(logits)s=0for prob, label in zip(probs, labels):s -= label * np.log(prob)return ssoftmax_cross_entropy(logits=[0.0, 5.0, 1.0], labels=[0.0, 0.8, 0.2])

对比直接调用结果

logits = [[4.0, 2.0, 1.0], [0.0, 5.0, 1.0]]
labels = [[1.0, 0.0, 0.0], [0.0, 0.8, 0.2]]
tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits)

tf.nn.sparse_softmax_cross_entropy_with_logits

相比于 softmax_cross_entropy_with_logits ,只是输入变了,是hard_label, 也就是没有 one-hot 或者multi-hot 处理的格式。

相类比的可以理解下面这些函数的计算。
tf.keras.losses.BinaryCrossentropy
tf.keras.losses.binary_crossentropy
tf.keras.metrics.BinaryCrossentropy

tf.keras.losses.CategoricalCrossentropy
tf.keras.losses.categorical_crossentropy
tf.keras.metrics.CategoricalCrossentropy

tf.keras.losses.SparseCategoricalCrossentropy
tf.keras.losses.sparse_categorical_crossentropy
tf.keras.metrics.SparseCategoricalCrossentropy

在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部