iT邦幫忙

2022 iThome 鐵人賽

DAY 21
0

今日大綱

  • Mean squared error (MSE) 與 Mean absolute error
  • Cross entropy
  • Hinge loss

Tensorflow的損失函數主要分為這三類,Mean squared error 與Mean absolute error為迴歸常使用的損失函數,Cross entropy則應用於分類問題,Hinge loss適用於支持向量機 (SVM)。

在Tensorflow套件裡建立模型時使用的指令為model.compile(),在此設定損失函數以及優化器等參數。

Mean squared error與 Mean absolute error

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())

這兩個損失函數的計算方式如下:
https://ithelp.ithome.com.tw/upload/images/20221004/20145688GMB9vkcSwA.png

Cross entropy

分類問題的目標值能夠為二元分類也可以是多分類,二元分類所使用的損失函數為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。

謝謝您的瀏覽!
/images/emoticon/emoticon29.gif


上一篇
【Day 20】神經網路實作 Neural network implementation
下一篇
【Day 22】Keras的優化器 Optimizer
系列文
從機器學習到深度學習 - 30天搞懂常見演算法的基礎理論30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言