Keras官方中文文檔:性能評估Metrices詳解
能評估
使用方法
性能評估模塊提供了一系列用于模型性能評估的函數(shù),這些函數(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'])
也可以自定義一個(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ù)測值, 與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: 對二分類問題,計(jì)算在所有預(yù)測值上的平均正確率
categorical_accuracy:對多分類問題,計(jì)算再所有預(yù)測值上的平均正確率
sparse_categorical_accuracy:與categorical_accuracy相同,在對稀疏的目標(biāo)值預(yù)測時(shí)有用
top_k_categorical_accracy: 計(jì)算top-k正確率,當(dāng)預(yù)測值的前k個(gè)值中存在目標(biāo)類別即認(rèn)為預(yù)測正確
sparse_top_k_categorical_accuracy:與top_k_categorical_accracy作用相同,但適用于稀疏情況
定制評估函數(shù)
定制的評估函數(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ǔ)充知識:Keras.metrics中的accuracy總結(jié)
1. 背景
Accuracy(準(zhǔn)確率)是機(jī)器學(xué)習(xí)中最簡單的一種評價(jià)模型好壞的指標(biāo),每一個(gè)從事機(jī)器學(xué)習(xí)工作的人一定都使用過這個(gè)指標(biāo)。沒從事過機(jī)器學(xué)習(xí)的人大都也知道這個(gè)指標(biāo),比如你去向別人推銷一款自己做出來的字符識別軟件,人家一定會問你準(zhǔn)確率是多少。準(zhǔn)確率聽起來簡單,但不是所有人都能理解得透徹,本文將介紹Keras中accuracy(也適用于Tensorflow)的幾個(gè)新“玩法”。
2. Keras中的accuracy介紹
Keras.metrics中總共給出了6種accuracy,如下圖所示:
接下來將對這些accuracy進(jìn)行逐個(gè)介紹。
1) accuracy
該accuracy就是大家熟知的最樸素的accuracy。比如我們有6個(gè)樣本,其真實(shí)標(biāo)簽y_true為[0, 1, 3, 3, 4, 2],但被一個(gè)模型預(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的計(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ù)測值和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中計(jì)算得到最終的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個(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ù)測的分?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ù)測的分?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要求樣本在真值類別上的預(yù)測分?jǐn)?shù)是在所有類別上預(yù)測分?jǐn)?shù)的最大值,才算預(yù)測對,而top_k_categorical_accuracy只要求樣本在真值類別上的預(yù)測分?jǐn)?shù)排在其在所有類別上的預(yù)測分?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ù)前面知識我們可以計(jì)算得到其categorical_accuracy=50%,但是其top_k_categorical_accuracy是多少呢?答案跟k息息相關(guān)。如果k大于或等于3,其top_k_categorical_accuracy毫無疑問是100%,因?yàn)榭偣簿?個(gè)類別。如果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ù)測標(biāo)簽的top_k內(nè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ù)測對了3個(gè),因此k=2時(shí)top_k_categorical_accuracy=75%。說明一下,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ù)測標(biāo)簽的top_k內(nè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ù)測對了3個(gè),因此k=2時(shí)top_k_categorical_accuracy=75%。
3. 總結(jié)
綜上,keras中的accuracy metric用法很多,大家可以根據(jù)自己的實(shí)際情況選擇合適的accuracy metric。以下是幾個(gè)比較常見的用法:
1) 當(dāng)你的標(biāo)簽和預(yù)測值都是具體的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)然,還有其他更高級的用法,比如對每個(gè)類別的accuracy求平均,或者對每個(gè)類別的accuracy進(jìn)行加權(quán),或者對每個(gè)樣本的accuracy進(jìn)行加權(quán)等,不在本文的討論范圍,大家有興趣可以去參考Tensorflow或者Keras的官方文檔。
以上這篇Keras官方中文文檔:性能評估Metrices詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
tensorflow mnist 數(shù)據(jù)加載實(shí)現(xiàn)并畫圖效果
TensorFlow™ 是一個(gè)采用數(shù)據(jù)流圖(data flow graphs),用于數(shù)值計(jì)算的開源軟件庫。這篇文章給大家介紹tensorflow mnist 數(shù)據(jù)加載實(shí)現(xiàn)并畫圖效果,感興趣的朋友一起看看吧2020-02-02python使用requests?POST提交一個(gè)鍵多個(gè)值方式
這篇文章主要介紹了python使用requests?POST提交一個(gè)鍵多個(gè)值方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02pandas.DataFrame 根據(jù)條件新建列并賦值的方法
下面小編就為大家分享一篇pandas.DataFrame 根據(jù)條件新建列并賦值的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04用Q-learning算法實(shí)現(xiàn)自動(dòng)走迷宮機(jī)器人的方法示例
這篇文章主要介紹了用Q-learning算法實(shí)現(xiàn)自動(dòng)走迷宮機(jī)器人的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06在DigitalOcean的服務(wù)器上部署flaskblog應(yīng)用
這篇文章主要介紹了在DigitalOcean的服務(wù)器上部署flaskblog的方法,flaskblog是用Python的Flask開發(fā)的一個(gè)博客程序,而DigitalOcean則是大受歡迎的SSD主機(jī)提供商,需要的朋友可以參考下2015-12-12