使用浮点标签在 CNN 中进行二元分类时使用什么损失函数?

发布于 2025-01-12 05:42:46 字数 262 浏览 0 评论 0原文

因此,我正在构建一个 CNN,它使用从 0 到 1 的标签获取图像。

我的意思是,我正在尝试对图像中的一个事物进行检测,并且每个图像都有一个 0 之间的标签1 代表该类型事件出现在该图像中的概率。

我想输出这个概率,所以我在输出层使用 sigmoid 激活函数,但我在决定什么损失函数在这种情况下有意义时遇到了困难。如果我的标签是 0 和 1,我会使用二进制交叉熵,但是当我的标签是从 0 到 1 的浮点数时,这仍然有意义吗?

干杯。

So I am building a CNN that gets images using labels that go from 0 to 1.

What I mean is that I am trying to perform detection of one thing in the image and each image has a label between 0 and 1 that stands for the probability of said type of event being in that image.

I want to output this probability so I am using a sigmoid activation function in the output layer but I am having trouble in deciding what loss function makes sense in this situation. If my labels were 0 and 1s I would use Binary CrossEntropy but does that still make sense when my labels are floats ranging from 0 to 1?

Cheers.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

靖瑶 2025-01-19 05:42:46

此解决方案适用于 logits (最后一个线性层的输出),而不是输出概率

def loss(logits, soft_labels):
    anti_soft_labels = 1 - soft_labels
    return soft_labels * tf.nn.softplus(-logits) 
+ anti_soft_labels * tf.nn.softplus(logits) + tf.math.xlogy(soft_labels, soft_labels) + tf.math.xlogy(anti_soft_labels, anti_soft_labels)

loss(logits=tf.constant([10., 0, -10]), soft_labels=tf.constant([1., 0.5, 0.]))
# [4.53989e-05, 0.00000e+00, 4.53989e-05]

如果您需要将 0 作为任何软标签使用的最小损失值

def loss(logits, soft_labels):
    anti_soft_labels = 1 - soft_labels
    return soft_labels * tf.nn.softplus(-logits) \
        + anti_soft_labels * tf.nn.softplus(logits) \
        + tf.math.xlogy(soft_labels, soft_labels) \
        + tf.math.xlogy(anti_soft_labels, anti_soft_labels)

loss(logits=tf.constant([10., 0, -10]), soft_labels=tf.constant([1., 0.5, 0.]))
# [4.53989e-05, 0.00000e+00, 4.53989e-05]```

This solution is for logits (output of last linear layer) not for output probabilities

def loss(logits, soft_labels):
    anti_soft_labels = 1 - soft_labels
    return soft_labels * tf.nn.softplus(-logits) 
+ anti_soft_labels * tf.nn.softplus(logits) + tf.math.xlogy(soft_labels, soft_labels) + tf.math.xlogy(anti_soft_labels, anti_soft_labels)

loss(logits=tf.constant([10., 0, -10]), soft_labels=tf.constant([1., 0.5, 0.]))
# [4.53989e-05, 0.00000e+00, 4.53989e-05]

If you need to have 0 as minimal loss value for any soft label use

def loss(logits, soft_labels):
    anti_soft_labels = 1 - soft_labels
    return soft_labels * tf.nn.softplus(-logits) \
        + anti_soft_labels * tf.nn.softplus(logits) \
        + tf.math.xlogy(soft_labels, soft_labels) \
        + tf.math.xlogy(anti_soft_labels, anti_soft_labels)

loss(logits=tf.constant([10., 0, -10]), soft_labels=tf.constant([1., 0.5, 0.]))
# [4.53989e-05, 0.00000e+00, 4.53989e-05]```
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文