看其他帖子说"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)