今日大綱
Tensorflow的損失函數主要分為這三類,Mean squared error 與Mean absolute error為迴歸常使用的損失函數,Cross entropy則應用於分類問題,Hinge loss適用於支持向量機 (SVM)。
在Tensorflow套件裡建立模型時使用的指令為model.compile(),在此設定損失函數以及優化器等參數。
Mean squared error計算預測值與實際值之間的平方誤差,而Mean absolute error計算預測值與損失值之間的絕對值誤差。
以下為Mean squared error python範例
import tensorflow as tf
y_true = [20., 10., 23., 25.]
y_pred = [18., 10., 22., 24.]
mse = tf.keras.losses.MeanSquaredError()
print(mse(y_true, y_pred).numpy())
這個為MAE的範例
y_true = [20., 10., 23., 25.]
y_pred = [18., 10., 22., 24.]
mae = tf.keras.losses.MeanAbsoluteError()
print(mae(y_true, y_pred).numpy())
這兩個損失函數的計算方式如下:
分類問題的目標值能夠為二元分類也可以是多分類,二元分類所使用的損失函數為binary cross entropy,而多分類則使用categorical cross entropy以及sparse cross entropy。
##binary cross entropy
y_true =[[0, 0],[0,1],[0,0]]
y_pred = [[0.6,0.4],[0.4,0.6],[0.9,0.1]]
loss = tf.keras.losses.BinaryCrossentropy()
print(loss(y_true, y_pred).numpy())
## categorical cross entropy
y_true =[[0, 1, 0],[0, 0, 1]]
y_pred = [[0.05,0.95, 0],[0.1,0.8,0.1]]
loss = tf.keras.losses.CategoricalCrossentropy()
print(loss(y_true, y_pred).numpy())
Sparse categorical cross entropy與categorical cross entropy的差別在於前者one-hot encoding後為稀疏矩陣,只有一個類別為1,而後者能夠處理資料後多個欄位為1。此範例將與categorical cross entropy的結果一致。
## sparse categorical cross entropy
y_true =[1, 2]
y_pred = [[0.05,0.95, 0],[0.1,0.8,0.1]]
loss = tf.keras.losses.SparseCategoricalCrossentropy()
print(loss(y_true, y_pred).numpy())
這三個方法所獲得的cost分別為0.8、1.1769以及1.1769。
謝謝您的瀏覽!