我目前正在使用 TensorFlow 解決多標簽分類問題(總共 9 個標簽),這是模型編譯行:
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
我的模型的y_true標簽由 2 個 1 和 7 個 0 組成(例如,[0,1,0,0,0,1,0,0,0])。
我用TensorFlow嘗試了幾個模型,但是模型再復雜,準確率一直很差,準確率在0.3左右。
我想知道 Keras 準確性指標是否也適用于多標簽分類。例如,如果y_pred的概率值為 [0.1, 0.9, 0.3, 0.4, 0.5, 0.4, 0.3, 0.2, 0.1],Keras 是否從y_pred 中選出前 2 個概率,將它們轉換為 [0, 1, 0, 0, 1, 0, 0, 0, 0] 然后將準確度與帶有y_true標簽的準確度進行比較?
如果沒有,我是否必須實作自己的指標功能?
提前致謝!
uj5u.com熱心網友回復:
通常,準確率顯示預測標簽的哪一部分與原始標簽匹配。
如官方檔案所述:
該指標創建了兩個區域變數,total 和 count,用于計算 y_pred與y_true匹配的頻率。該頻率最終以二進制精度回傳:一種冪等運算,只需將總數除以計數即可。
該指標顯示概率預測中與真實標簽相等的部分。
所述 tf.keras.metrics.BinaryAccuracy輪由一個給定的閾值(0.5默認情況下)的預測概率。因此,如果模型輸出為 [0.9, 0.3, 0.6],則在與真實標簽進行比較之前,它將四舍五入為 [1, 0, 1]。
但是,準確度度量不僅會顯示預測的 1 與真實標簽匹配的位置,還會顯示 0 與 0 匹配的位置。在大多數情況下,它對多標簽問題不利,因為資料中 1 和 0 之間存在不平衡。在您的情況下,您的 0 比 1 多 3.5 倍。如果你的模型只輸出零,它確實是一個糟糕的模型,但由于原始標簽的 7/9 也是零,它馬上就會有 7/9 或幾乎 78% 的準確度。
我建議使用其他指標進行多標簽分類:
- Precision,顯示預測的 1 的哪一部分實際上是 1
- Recall,它顯示了實際 1 的哪一部分被“找到”并預測為 1
- F1 和 F-beta,它總結了精度和召回率
單獨來看,這些指標不會為您提供有關模型性能的太多資訊,因此最好將它們結合使用。您可以在sklearn 檔案和本文中閱讀有關它們的更多資訊。
就實作而言,Tensorflow 中有Precision和Recall 的官方實作,Tensorflow Addons 有F1Score和FBetaScore。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/352527.html
