tf.keras.losses.CategoricalCrossentropy 多分类 交叉熵 损失函数示例

import numpy as np 
import tensorflow as tf
y_true = np.array([0, 1, 0])  # 独热编码
y_pred = np.array([0.5, 0.2, 0.3])  # 预测概率
delta = 1e-7

计算公式

l o s s = 1 n ∑ i t r u e i × ( − l o g e p r e d i + l e − 7 ) loss = \frac{1}{n}\sum_{i}^{}true_{i}\times \left ( -log_{e}^{pred_{i}+le^{-7}}\right ) loss=n1itruei×(logepredi+le7)

n:样本数

true : y_true

pred : y_pred

计算过程

− [ ( 0 × l o g e 0.5 + l e − 7 ) + ( 1 × l o g e 0.2 + l e − 7 ) + ( 0 × l o g e 0.3 + l e − 7 ) ] = 1.6094374124342252 -[(0 \times log_{e}^{0.5+le^{-7}})+(1 \times log_{e}^{0.2+le^{-7}})+(0 \times log_{e}^{0.3+le^{-7}})]=1.6094374124342252 [(0×loge0.5+le7)+(1×loge0.2+le7)+(0×loge0.3+le7)]=1.6094374124342252

tf.keras.losses.CategoricalCrossentropy 实现

cce = tf.keras.losses.CategoricalCrossentropy()
cce(y_true, y_pred).numpy()
1.6094377040863037

numpy 实现

y_pred = y_pred+delta  # 添加一个微小值可以防止负无限大(np.log(0))的发生。
print(y_pred)
[0.5000001 0.2000001 0.3000001]
y_pred_log = np.log(y_pred)  # log表示以e为底数的自然对数
print(y_pred_log)
[-0.69314698 -1.60943741 -1.20397247]
print(y_true*y_pred_log)
[-0.         -1.60943741 -0.        ]
loss = -np.sum(y_true*y_pred_log)
print(loss)
1.6094374124342252
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏华东的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值