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

接下來(lái)將對(duì)這些accuracy進(jìn)行逐個(gè)介紹。
1) accuracy
該accuracy就是大家熟知的最樸素的accuracy。比如我們有6個(gè)樣本,其真實(shí)標(biāo)簽y_true為[0, 1, 3, 3, 4, 2],但被一個(gè)模型預(yù)測(cè)為了[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分類(lèi)的情況。從上圖中可以看到binary_accuracy的計(jì)算除了y_true和y_pred外,還有一個(gè)threshold參數(shù),該參數(shù)默認(rèn)為0.5。比如有6個(gè)樣本,其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%。具體計(jì)算方法為:1)將y_pred中的每個(gè)預(yù)測(cè)值和threshold對(duì)比,大于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中計(jì)算得到最終的binary_accuracy=87.5%。
3) categorical_accuracy
categorical_accuracy和accuracy也很像。不同的是accuracy針對(duì)的是y_true和y_pred都為具體標(biāo)簽的情況,而categorical_accuracy針對(duì)的是y_true為onehot標(biāo)簽,y_pred為向量的情況。比如有4個(gè)樣本,其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%。具體計(jì)算方法為:1)將y_true轉(zhuǎn)為非onehot的形式,即y_true_new=[2, 1, 1, 0];2)根據(jù)y_pred中的每個(gè)樣本預(yù)測(cè)的分?jǐn)?shù)得到y(tǒng)_pred_new=[1, 1, 1, 0];3)將y_true_new和y_pred_new代入到2.1中計(jì)算得到最終的categorical_accuracy=75%。
4) sparse_categorical_accuracy
和categorical_accuracy功能一樣,只是其y_true為非onehot的形式。比如有4個(gè)樣本,其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%。具體計(jì)算方法為:1)根據(jù)y_pred中的每個(gè)樣本預(yù)測(cè)的分?jǐn)?shù)得到y(tǒng)_pred_new=[1, 1, 1, 0];2)將y_true和y_pred_new代入到2.1中計(jì)算得到最終的categorical_accuracy=75%。
5) top_k_categorical_accuracy
在categorical_accuracy的基礎(chǔ)上加上top_k。categorical_accuracy要求樣本在真值類(lèi)別上的預(yù)測(cè)分?jǐn)?shù)是在所有類(lèi)別上預(yù)測(cè)分?jǐn)?shù)的最大值,才算預(yù)測(cè)對(duì),而top_k_categorical_accuracy只要求樣本在真值類(lèi)別上的預(yù)測(cè)分?jǐn)?shù)排在其在所有類(lèi)別上的預(yù)測(cè)分?jǐn)?shù)的前k名就行。比如有4個(gè)樣本,其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ù)前面知識(shí)我們可以計(jì)算得到其categorical_accuracy=50%,但是其top_k_categorical_accuracy是多少呢?答案跟k息息相關(guān)。如果k大于或等于3,其top_k_categorical_accuracy毫無(wú)疑問(wèn)是100%,因?yàn)榭偣簿?個(gè)類(lèi)別。如果k小于3,那就要計(jì)算了,比如k=2,那么top_k_categorical_accuracy=75%。具體計(jì)算方法為:1)將y_true轉(zhuǎn)為非onehot的形式,即y_true_new=[2, 1, 1, 0];2)計(jì)算y_pred的top_k的label,比如k=2時(shí),y_pred_new = [[0, 1], [0, 1], [0, 1], [0, 2]];3)根據(jù)每個(gè)樣本的真實(shí)標(biāo)簽是否在預(yù)測(cè)標(biāo)簽的top_k內(nèi)來(lái)統(tǒng)計(jì)準(zhǔn)確率,上述4個(gè)樣本為例,2不在[0, 1]內(nèi),1在[0, 1]內(nèi),1在[0, 1]內(nèi),0在[0, 2]內(nèi),4個(gè)樣本總共預(yù)測(cè)對(duì)了3個(gè),因此k=2時(shí)top_k_categorical_accuracy=75%。說(shuō)明一下,Keras中計(jì)算top_k_categorical_accuracy時(shí)默認(rèn)的k值為5。
6) sparse_top_k_categorical_accuracy
和top_k_categorical_accuracy功能一樣,只是其y_true為非onehot的形式。比如有4個(gè)樣本,其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]]。計(jì)算sparse_top_k_categorical_accuracy的步驟如下:1)計(jì)算y_pred的top_k的label,比如k=2時(shí),y_pred_new = [[0, 1], [0, 1], [0, 1], [0, 2]];2)根據(jù)每個(gè)樣本的真實(shí)標(biāo)簽是否在預(yù)測(cè)標(biāo)簽的top_k內(nèi)來(lái)統(tǒng)計(jì)準(zhǔn)確率,上述4個(gè)樣本為例,2不在[0, 1]內(nèi),1在[0, 1]內(nèi),1在[0, 1]內(nèi),0在[0, 2]內(nèi),4個(gè)樣本總共預(yù)測(cè)對(duì)了3個(gè),因此k=2時(shí)top_k_categorical_accuracy=75%。
3. 總結(jié)
綜上,keras中的accuracy metric用法很多,大家可以根據(jù)自己的實(shí)際情況選擇合適的accuracy metric。以下是幾個(gè)比較常見(jiàn)的用法:
1) 當(dāng)你的標(biāo)簽和預(yù)測(cè)值都是具體的label index(如y_true=[1, 2, 1], y_pred=[0, 1, 1])時(shí),用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]])時(shí),用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]])時(shí),用keras.metrics.categorical_accuracy。
當(dāng)然,還有其他更高級(jí)的用法,比如對(duì)每個(gè)類(lèi)別的accuracy求平均,或者對(duì)每個(gè)類(lèi)別的accuracy進(jìn)行加權(quán),或者對(duì)每個(gè)樣本的accuracy進(jìn)行加權(quán)等,不在本文的討論范圍,大家有興趣可以去參考Tensorflow或者Keras的官方文檔。
以上這篇Keras官方中文文檔:性能評(píng)估Metrices詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
matplotlib grid()設(shè)置網(wǎng)格線外觀的實(shí)現(xiàn)
這篇文章主要介紹了matplotlib grid()設(shè)置網(wǎng)格線外觀的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
python如何利用cv2.rectangle()繪制矩形框
cv2.rectangle這個(gè)函數(shù)的作用是在圖像上繪制一個(gè)簡(jiǎn)單的矩形,下面這篇文章主要給大家介紹了關(guān)于python如何利用cv2.rectangle()繪制矩形框的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12
關(guān)于Python 常用獲取元素 Driver 總結(jié)
今天小編就為大家分享一篇關(guān)于Python 常用獲取元素 Driver 總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
Python輕松讀取TOML文件告別手動(dòng)編輯配置文件
這篇文章主要為大家介紹了Python輕松讀取TOML文件告別手動(dòng)編輯配置文件,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
如何解決PyCharm顯示:無(wú)效的Python?SDK
這篇文章主要介紹了在不同電腦之間傳輸Python項(xiàng)目時(shí)遇到的路徑問(wèn)題,并提供了解決方法,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2025-01-01
python實(shí)現(xiàn)ModBusRTU客戶端方式
這篇文章主要介紹了python實(shí)現(xiàn)ModBusRTU客戶端方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
Python用requests模塊實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁(yè)爬蟲(chóng)
大家好,本篇文章主要講的是Python用requests模塊實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁(yè)爬蟲(chóng),感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-02-02
關(guān)于Python 的簡(jiǎn)單柵格圖像邊界提取方法
今天小編就為大家分享一篇關(guān)于Python 的簡(jiǎn)單柵格圖像邊界提取方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07
pytorch中圖像的數(shù)據(jù)格式實(shí)例
今天小編就為大家分享一篇pytorch中圖像的數(shù)據(jù)格式實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
python openCV實(shí)現(xiàn)攝像頭獲取人臉圖片
這篇文章主要為大家詳細(xì)介紹了python openCV實(shí)現(xiàn)攝像頭獲取人臉圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-08-08

