Keras官方中文文檔:性能評估Metrices詳解
能評估
使用方法
性能評估模塊提供了一系列用于模型性能評估的函數(shù),這些函數(shù)在模型編譯時由metrics關(guān)鍵字設(shè)置
性能評估函數(shù)類似與目標(biāo)函數(shù), 只不過該性能的評估結(jié)果講不會用于訓(xùn)練.
可以通過字符串來使用域定義的性能評估函數(shù)
model.compile(loss='mean_squared_error',
optimizer='sgd',
metrics=['mae', 'acc'])
也可以自定義一個Theano/TensorFlow函數(shù)并使用之
from keras import metrics
model.compile(loss='mean_squared_error',
optimizer='sgd',
metrics=[metrics.mae, metrics.categorical_accuracy])
參數(shù)
y_true:真實標(biāo)簽,theano/tensorflow張量
y_pred:預(yù)測值, 與y_true形式相同的theano/tensorflow張量
返回值
單個用以代表輸出各個數(shù)據(jù)點(diǎn)上均值的值
可用預(yù)定義張量
除fbeta_score額外擁有默認(rèn)參數(shù)beta=1外,其他各個性能指標(biāo)的參數(shù)均為y_true和y_pred
binary_accuracy: 對二分類問題,計算在所有預(yù)測值上的平均正確率
categorical_accuracy:對多分類問題,計算再所有預(yù)測值上的平均正確率
sparse_categorical_accuracy:與categorical_accuracy相同,在對稀疏的目標(biāo)值預(yù)測時有用
top_k_categorical_accracy: 計算top-k正確率,當(dāng)預(yù)測值的前k個值中存在目標(biāo)類別即認(rèn)為預(yù)測正確
sparse_top_k_categorical_accuracy:與top_k_categorical_accracy作用相同,但適用于稀疏情況
定制評估函數(shù)
定制的評估函數(shù)可以在模型編譯時傳入,該函數(shù)應(yīng)該以(y_true, y_pred)為參數(shù),并返回單個張量,或從metric_name映射到metric_value的字典,下面是一個示例:
(y_true, y_pred) as arguments and return a single tensor value.
import keras.backend as K
def mean_pred(y_true, y_pred):
return K.mean(y_pred)
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy', mean_pred])
補(bǔ)充知識:Keras.metrics中的accuracy總結(jié)
1. 背景
Accuracy(準(zhǔn)確率)是機(jī)器學(xué)習(xí)中最簡單的一種評價模型好壞的指標(biāo),每一個從事機(jī)器學(xué)習(xí)工作的人一定都使用過這個指標(biāo)。沒從事過機(jī)器學(xué)習(xí)的人大都也知道這個指標(biāo),比如你去向別人推銷一款自己做出來的字符識別軟件,人家一定會問你準(zhǔn)確率是多少。準(zhǔn)確率聽起來簡單,但不是所有人都能理解得透徹,本文將介紹Keras中accuracy(也適用于Tensorflow)的幾個新“玩法”。
2. Keras中的accuracy介紹
Keras.metrics中總共給出了6種accuracy,如下圖所示:

接下來將對這些accuracy進(jìn)行逐個介紹。
1) accuracy
該accuracy就是大家熟知的最樸素的accuracy。比如我們有6個樣本,其真實標(biāo)簽y_true為[0, 1, 3, 3, 4, 2],但被一個模型預(yù)測為了[0, 1, 3, 4, 4, 4],即y_pred=[0, 1, 3, 4, 4, 4],那么該模型的accuracy=4/6=66.67%。
2) binary_accuracy
binary_accuracy和accuracy最大的不同就是,它適用于2分類的情況。從上圖中可以看到binary_accuracy的計算除了y_true和y_pred外,還有一個threshold參數(shù),該參數(shù)默認(rèn)為0.5。比如有6個樣本,其y_true為[0, 0, 0, 1, 1, 0],y_pred為[0.2, 0.3, 0.6, 0.7, 0.8, 0.1],那么其binary_accuracy=5/6=87.5%。具體計算方法為:1)將y_pred中的每個預(yù)測值和threshold對比,大于threshold的設(shè)為1,小于等于threshold的設(shè)為0,得到y(tǒng)_pred_new=[0, 0, 1, 1, 1, 0];2)將y_true和y_pred_new代入到2.1中計算得到最終的binary_accuracy=87.5%。
3) categorical_accuracy
categorical_accuracy和accuracy也很像。不同的是accuracy針對的是y_true和y_pred都為具體標(biāo)簽的情況,而categorical_accuracy針對的是y_true為onehot標(biāo)簽,y_pred為向量的情況。比如有4個樣本,其y_true為[[0, 0, 1], [0, 1, 0], [0, 1, 0], [1, 0, 0]],y_pred為[[0.1, 0.6, 0.3], [0.2, 0.7, 0.1], [0.3, 0.6, 0.1], [0.9, 0, 0.1]],則其categorical_accuracy為75%。具體計算方法為:1)將y_true轉(zhuǎn)為非onehot的形式,即y_true_new=[2, 1, 1, 0];2)根據(jù)y_pred中的每個樣本預(yù)測的分?jǐn)?shù)得到y(tǒng)_pred_new=[1, 1, 1, 0];3)將y_true_new和y_pred_new代入到2.1中計算得到最終的categorical_accuracy=75%。
4) sparse_categorical_accuracy
和categorical_accuracy功能一樣,只是其y_true為非onehot的形式。比如有4個樣本,其y_true為[2, 1, 1, 0],y_pred為[[0.1, 0.6, 0.3], [0.2, 0.7, 0.1], [0.3, 0.6, 0.1], [0.9, 0, 0.1]],則其categorical_accuracy為75%。具體計算方法為:1)根據(jù)y_pred中的每個樣本預(yù)測的分?jǐn)?shù)得到y(tǒng)_pred_new=[1, 1, 1, 0];2)將y_true和y_pred_new代入到2.1中計算得到最終的categorical_accuracy=75%。
5) top_k_categorical_accuracy
在categorical_accuracy的基礎(chǔ)上加上top_k。categorical_accuracy要求樣本在真值類別上的預(yù)測分?jǐn)?shù)是在所有類別上預(yù)測分?jǐn)?shù)的最大值,才算預(yù)測對,而top_k_categorical_accuracy只要求樣本在真值類別上的預(yù)測分?jǐn)?shù)排在其在所有類別上的預(yù)測分?jǐn)?shù)的前k名就行。比如有4個樣本,其y_true為[[0, 0, 1], [0, 1, 0], [0, 1, 0], [1, 0, 0]],y_pred為[[0.3, 0.6, 0.1], [0.5, 0.4, 0.1], [0.3, 0.6, 0.1], [0.9, 0, 0.1]],根據(jù)前面知識我們可以計算得到其categorical_accuracy=50%,但是其top_k_categorical_accuracy是多少呢?答案跟k息息相關(guān)。如果k大于或等于3,其top_k_categorical_accuracy毫無疑問是100%,因為總共就3個類別。如果k小于3,那就要計算了,比如k=2,那么top_k_categorical_accuracy=75%。具體計算方法為:1)將y_true轉(zhuǎn)為非onehot的形式,即y_true_new=[2, 1, 1, 0];2)計算y_pred的top_k的label,比如k=2時,y_pred_new = [[0, 1], [0, 1], [0, 1], [0, 2]];3)根據(jù)每個樣本的真實標(biāo)簽是否在預(yù)測標(biāo)簽的top_k內(nèi)來統(tǒng)計準(zhǔn)確率,上述4個樣本為例,2不在[0, 1]內(nèi),1在[0, 1]內(nèi),1在[0, 1]內(nèi),0在[0, 2]內(nèi),4個樣本總共預(yù)測對了3個,因此k=2時top_k_categorical_accuracy=75%。說明一下,Keras中計算top_k_categorical_accuracy時默認(rèn)的k值為5。
6) sparse_top_k_categorical_accuracy
和top_k_categorical_accuracy功能一樣,只是其y_true為非onehot的形式。比如有4個樣本,其y_true為[2, 1, 1, 0],y_pred為[[0.3, 0.6, 0.1], [0.5, 0.4, 0.1], [0.3, 0.6, 0.1], [0.9, 0, 0.1]]。計算sparse_top_k_categorical_accuracy的步驟如下:1)計算y_pred的top_k的label,比如k=2時,y_pred_new = [[0, 1], [0, 1], [0, 1], [0, 2]];2)根據(jù)每個樣本的真實標(biāo)簽是否在預(yù)測標(biāo)簽的top_k內(nèi)來統(tǒng)計準(zhǔn)確率,上述4個樣本為例,2不在[0, 1]內(nèi),1在[0, 1]內(nèi),1在[0, 1]內(nèi),0在[0, 2]內(nèi),4個樣本總共預(yù)測對了3個,因此k=2時top_k_categorical_accuracy=75%。
3. 總結(jié)
綜上,keras中的accuracy metric用法很多,大家可以根據(jù)自己的實際情況選擇合適的accuracy metric。以下是幾個比較常見的用法:
1) 當(dāng)你的標(biāo)簽和預(yù)測值都是具體的label index(如y_true=[1, 2, 1], y_pred=[0, 1, 1])時,用keras.metrics.accuracy。
2) 當(dāng)你的標(biāo)簽是具體的label index,而prediction是向量形式(如y_true=[1, 2, 1], y_pred=[[0.2, 0.3, 0.5], [0.9, 0.1, 0], [0, 0.4, 0.6]])時,用keras.metrics.sparse_categorical_accuracy。
3)當(dāng)你的標(biāo)簽是onehot形式,而prediction是向量形式(如y_true=[[0, 1, 0], [0, 0, 1], [0, 1, 0]], y_pred=[[0.2, 0.3, 0.5], [0.9, 0.1, 0], [0, 0.4, 0.6]])時,用keras.metrics.categorical_accuracy。
當(dāng)然,還有其他更高級的用法,比如對每個類別的accuracy求平均,或者對每個類別的accuracy進(jìn)行加權(quán),或者對每個樣本的accuracy進(jìn)行加權(quán)等,不在本文的討論范圍,大家有興趣可以去參考Tensorflow或者Keras的官方文檔。
以上這篇Keras官方中文文檔:性能評估Metrices詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
matplotlib grid()設(shè)置網(wǎng)格線外觀的實現(xiàn)
這篇文章主要介紹了matplotlib grid()設(shè)置網(wǎng)格線外觀的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
python如何利用cv2.rectangle()繪制矩形框
cv2.rectangle這個函數(shù)的作用是在圖像上繪制一個簡單的矩形,下面這篇文章主要給大家介紹了關(guān)于python如何利用cv2.rectangle()繪制矩形框的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12
關(guān)于Python 常用獲取元素 Driver 總結(jié)
今天小編就為大家分享一篇關(guān)于Python 常用獲取元素 Driver 總結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
Python用requests模塊實現(xiàn)動態(tài)網(wǎng)頁爬蟲
大家好,本篇文章主要講的是Python用requests模塊實現(xiàn)動態(tài)網(wǎng)頁爬蟲,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下2022-02-02
python openCV實現(xiàn)攝像頭獲取人臉圖片
這篇文章主要為大家詳細(xì)介紹了python openCV實現(xiàn)攝像頭獲取人臉圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-08-08

