看其他帖子说"from_logits=False的结果是经过softmax后的结果,from_logits=True的结果是没经过softmax后的结果",我感觉这个说法有问题

我觉得应该是"from_logits=False的结果是没经过softmax后的结果,from_logits=True的结果是经过softmax后的结果"

以下是我写的计算方法论证,如有不对还望指点。

红框为手写损失函数代码,上图是经过softmax后的,下图是没经过softmax后的

附代码

y_true = np.array([0, 1, 0])  # 独热编码
y_pred = np.array([0.5, 0.2, 0.3])  # 预测概率
cce = tf.keras.losses.CategoricalCrossentropy(from_logits=False)
print(cce(y_true, y_pred).numpy())


y_pred = y_pred
# y_pred = tf.nn.softmax(y_pred)
y_pred_log = np.log(y_pred)  # log表示以e为底数的自然对数
loss = -np.sum(y_true*y_pred_log)
print(loss)

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐