1. 程式人生 > >TensorFlow學習筆記--onehot編碼

TensorFlow學習筆記--onehot編碼

onehot:顧名思義--獨熱

適用:因為有些資料集並非連續性的,例如常見的多分類,適用於離散型的資料集

離散型的資料集:二分類,多分類等等

連續型的資料集:語言識別,文字等等

對比普通label,和做了onehot編碼的label

這裡假設為四分類batch_size為4

普通標籤

label = [0,1,2,3]

onehot編碼標籤

label = [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]

程式碼

tf.one_hot(
    indices,#輸入,這裡是一維的
    depth,# one hot dimension.
    on_value=None,#output 預設1
    off_value=None,#output 預設0
    axis=None,#預設為1
    dtype=None,
    name=None
)

labels = [0,1,2,3]

labels_ = tf.one_hot(labels,4,on_value=1,axis=1)

labels_---> [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]

計算loss

cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits=logits_scaled, labels=labels)
loss = tf.reduce_mean(cross_entropy, name='loss')

這裡發兩個損失函式的對比:

兩個函式雖然功能類似,但是其引數labels有明顯區別。tf.nn.softmax_cross_entropy_with_logits()中的logits和labels的shape都是[batch_size, num_classes],而tf.nn.sparse_softmax_cross_entropy_with_logits()中的labels是稀疏表示的,是 [0,num_classes)中的一個數值,代表正確分類結果。即sparse_softmax_cross_entropy_with_logits 直接用標籤計算交叉熵,而 softmax_cross_entropy_with_logits 是標籤的onehot向量參與計算。softmax_cross_entropy_with_logits 的 labels 是 sparse_softmax_cross_entropy_with_logits 的 labels 的一個獨熱版本(one hot version)。