gpt4 book ai didi

tensorflow - TF 2.0 SparseCategoricalCrossEntropy 奇怪的行为

转载 作者:行者123 更新时间:2023-11-30 09:02:54 25 4
gpt4 key购买 nike

我在这里尝试使用 SparseCategoricalCrossEntropy 进行一些自定义,但我认为当概率总和不等于 1 时,该值不是我所期望的。

import numpy as np
import tensorflow as tf

cce = tf.keras.losses.SparseCategoricalCrossentropy(reduction=Reduction.NONE)
loss = cce(
tf.constant([0, 1, 2]),
tf.constant([[.9, .05, .05], [.5, .89, .6], [.05, .01, .94]]))
print(loss) # [0.10536056 0.8046684 0.0618754]

# What I expect for the second list is
-np.log(.89) # 0.1165338

# Validity check for first and third row
-np.log(.9) # 0.105360
-np.log(.94) # 0.061875

我在这里误解了什么吗?它在幕后做什么?

最佳答案

我们来看看keras implementation numpy 的损失:

def categorical_crossentropy(target, output, from_logits=False):
if from_logits:
output = softmax(output)
else:
output /= output.sum(axis=-1, keepdims=True)
output = np.clip(output, 1e-7, 1 - 1e-7)
return np.sum(target * -np.log(output), axis=-1, keepdims=False)

如您所见,输出除以所有概率的总和,因此我们有:

-np.log(.89/(.5 + .89 + .6)) # 0.8046684549923527

关于tensorflow - TF 2.0 SparseCategoricalCrossEntropy 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59600088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com