tensorflow笔记 cross entropy loss

这篇博客详细介绍了在TensorFlow中如何使用sigmoid_cross_entropy_with_logits和tf.keras.backend.binary_crossentropy计算交叉熵损失。文章通过公式推导解释了这两个函数的工作原理,并强调了它们在输入上的差异。
摘要由CSDN通过智能技术生成

交叉熵损失函数是模型中非常常见的一种损失函数,tensorflow中有一个计算交叉熵的函数:tf.nn.sigmoid_cross_entropy_with_logits,也可以调用keras中的函数: tf.keras.backend.binary_crossentropy,需要注意的是两者的输入有一些不同。


先来看看tf自带的sigmoid_cross_entropy_with_logits:

tf.nn.sigmoid_cross_entropy_with_logits(
    _sentinel=None,
    labels=None,
    logits=None,
    name=None
)

sigmoid_cross_entropy_with_logits()需要两个参数,神经网络最后一层的输出logits和真实值labels。内部会经过一次sigmoid再计算cross entropy loss,计算方式如下所示:

令x = logits, z = labels
Loss = - 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))

即后面代码中的prob_error2式


tf.keras.backend.binary_crossentropy与sigmoid_cross_entropy_with_logits输入有一些不一样,因为keras是已经内部封装好的函数,所以要求的输入是神经网络经过sigmoid后的输出,binary_crossentropy在内部会先将输入转化为logits,然后再调用tf.nn.sigmoid_cross_entropy_with_logits计算交叉熵。


下面做一个简单的验证,注意两个函数输入的不同

import numpy as np
import
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值