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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章