1. 程式人生 > 程式設計 >tensorflow 分類損失函式使用小記

tensorflow 分類損失函式使用小記

多分類損失函式

label.shape:[batch_size]; pred.shape: [batch_size,num_classes]

使用 tf.keras.losses.sparse_categorical_crossentropy(y_true,y_pred,from_logits=False,axis=-1)

- y_true 真實值, y_pred 預測值
- from_logits,我的理解是,如果預測結果經過了softmax(單次預測結果滿足和為1)就使用設為`False`,
如果預測結果未經過softmax就設為`True`.

pred = tf.convert_to_tensor([[0.9,0.05,0.05],[0.5,0.89,0.6],[2.05,0.01,0.94]])
label = tf.convert_to_tensor([0,1,2])
loss = tf.keras.losses.sparse_categorical_crossentropy(label,pred)
print(loss.numpy())
# 包含 reduction 引數,用於對一個批次的損失函式求平均值,求和等
# loss = tf.keras.losses.SparseCategoricalCrossentropy()(label,pred)
label.shape:[batch_size,num_classes](one_hot);pred.shape:[batch_size,num_classes]

使用 tf.keras.losses.categorical_crossentropy(y_true,axis=-1)

- y_true 真實值, y_pred 預測值
- from_logits 同上

pred = tf.convert_to_tensor([[0.9,[0.05,0.94]])
label = tf.convert_to_tensor([[1,0],[0,1]])
loss = tf.keras.losses.categorical_crossentropy(label,pred)
print(loss.numpy())

二分類損失損失函式

label = tf.convert_to_tensor([0,1],dtype=tf.float32)
pred = tf.convert_to_tensor([1,dtype=tf.float32)
loss = tf.keras.losses.BinaryCrossentropy()(label,pred)
print(loss.numpy())

多分類與二分類

通常 categorical_crossentropy與 softmax啟用函式搭配使用; binary_crossentropy 與 sigmoid搭配使用;

參考

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。