sparse_categorical_crossentropy和SparseCategoricalCrossentropy的用法区别

本文主要介绍两个函数SparseCategoricalCrossentropy和sparse_categorical_crossentropy的区别。
这两个函数的功能都是将数字编码转化成one-hot编码格式,然后对one-hot编码格式的数据(真实标签值)与预测出的标签值使用交叉熵损失函数。

先看一下官网给出的对于两个函数定义:

  • tf.keras.losses.SparseCategoricalCrossentropy(
    from_logits=False, reduction=losses_utils.ReductionV2.AUTO,
    name=‘sparse_categorical_crossentropy’)
  • tf.keras.losses.sparse_categorical_crossentropy(
    y_true, y_pred, from_logits=False, axis=-1)

函数定义中,最明显的区别是sparse_categorical_crossentropy中在参数中指定y_true(真实标签值)以及y_pred(预测标签值)。
具体用法参照以下两段代码:

import tensorflow as tf
import numpy as np
y_true = tf.constant([1, 2])
y_pred = tf.constant([[0.05, 0.95, 0], [0.1, 0.8, 0.1]])
loss = tf.reduce_mean(tf.keras.losses.sparse_categorical_crossentropy(y_true, y_pred))
scce = tf.keras.losses.SparseCategoricalCrossentropy()

print(loss.numpy())
print(scce(y_true, y_pred).numpy())

运行结果如下:在这里插入图片描述
sparse_categorical_crossentropy需在参数的部分指定y_true和y_pred
SparseCategoricalCrossentropy在调用部分指定y_true和y_pred

接下来,再对这两个函数的参数进行简单描述:

  1. SparseCategoricalCrossentropy
  • reduction=‘auto’,这个参数是进行最后的求平均,如果是设置为losses_utils.ReductionV2.None,就不会求平均了
# 设置为reduction='none'
scce = tf.keras.losses.SparseCategoricalCrossentropy(reduction='none')
# 输出结果是:
# [0.05129344 2.3025851 ]
# 设置为reduction='auto'
scce = tf.keras.losses.SparseCategoricalCrossentropy(reduction='auto')
# 输出结果是求平均后的结果:
# 1.1769392
  • from_logits
    from_logits=False, 指出进行交叉熵计算时,输入的y_pred是否是logits,logits就是没有经过softmax激活函数的fully connect的输出,如果在fully connect层之后经过了激活函数softmax的处理,那这个参数就可以设置为False

你可能感兴趣的:(keras)