在哪里使用二进制二进制交叉熵损失

问题描述

我有2个问题:

  1. 是否有任何资料可以让我看到TensorFlow的那些损失函数的实现?我已经在他们网站上的Github上进行了搜索,但是没有找到实现这些损失函数的公式。

  2. 当我使用tf.keras.losses.BinaryCrossentropy(from_logits = True)时,损失函数是什么?一个热向量([[0,1]])或只是恒定张量([1])?我观察到并注意到它对它们两个都有效。你可以写下公式吗?

编辑:我有猫和狗之类的分类

解决方法

  1. 您应该查看Tensorflow API官方文档:https://www.tensorflow.org/api_docs/python/tf/keras/losses/binary_crossentropy。在页面顶部,您可以找到链接“在GitHub上查看源代码”。这种损失是指Keras后端对二进制交叉熵的实现:https://github.com/tensorflow/tensorflow/blob/b36436b087bd8e8701ef51718179037cccdfc26e/tensorflow/python/keras/backend.py#L4795
  2. 也来自文档:“当只有两个标签类(假定为0和1)时,请使用此交叉熵损失。对于每个示例,每个预测应该有一个浮点值。
,

y_truey_pred应该是这样的张量:

import tensorflow as tf

binary_crossentropy = tf.keras.losses.BinaryCrossentropy()

a = tf.convert_to_tensor([1.,1.,0.,0.])
b = tf.convert_to_tensor([.1,.9,2.,8.,4.,3.])

binary_crossentropy(a,b)
<tf.Tensor: shape=(),dtype=float32,numpy=8.067944>
如果最后一层没有激活功能,则

from_logits应该为True。如果漫游器是一键编码的,它也可以工作:

d = tf.convert_to_tensor([[.4,.6],[.8,.2],[.7,.3],[.1,.9],[.2,.8],[.4,.6]])
c = tf.convert_to_tensor([[.8,[.3,.7],[.9,.1],.3]])

binary_crossentropy(c,d)
<tf.Tensor: shape=(),numpy=1.0452858>