tf.keras.losses.SparseCategoricalCrossentropy 学习总结

此方法就是计算结果的交叉熵的,Sparse的含义就是指期望的结果不需要是onehot结果,只需要记录对应的准确记过位置即可,对应概率值是1不变。

例如:

y_true = [1, 2]
y_pred = [[0.05, 0.95, 0], [0.1, 0.8, 0.1]]
#表示有三类结果(label0,lable1,label2),y_true的意思表示,期望的结果中索引下标为1的label的概率为1,下表为2的label的概率为1。此为稀疏表示法

SparseCategoricalCrossentropy有两个参数,分别为from_logits和reduction分别介绍:

from_logits参数:

  1. from_logits为False时,表示在计算交叉熵之前,此方法会对y_pred进行求和归一化操作,操作过程为:

y_pred=tf.math.divide(y_pred,tf.math.reduce_sum(y_pred,axis=-1,keepdims=True))

  1. from_logits为False时,表示在计算交叉熵之前,此方法会对y_pred进行softmax操作,操作过程为:

y_pred=tf.exp(y_pred) / tf.reduce_sum(tf.exp(y_pred), axis, keepdims=True)
#或则 y_pred=tf.math.softmax(y_pred)

reduction参数,参考(14条消息) keras.losses中 reduction=‘none‘的用法_muyuu的博客-CSDN博客_reduction='none:

  1. ‘none’:每个step位置的损失都单独保留。返回值的形状为:(batch_size, num_steps)其中,num_steps有可能不存在,对于RNN的往往存在

  1. ‘sum’:返回值 = 上述 batch_size*num_steps 个step位置的损失的和

  1. ‘sum_over_batch_size’:返回值 = 上述 batch_size× \times×num_steps 个step位置的损失的平均值,即 ‘sum’ 返回值 除以 batch_size× \times×num_steps

  1. ‘auto’:一般相当于 ‘sum_over_batch_size’

你可能感兴趣的:(tensorflow2.x,深度学习基础,tensorflow)