如何在Keras中自定義機器學習性能指標

2021-01-10 不靠譜的貓

Keras提供的指標使得我們能夠評估深度學習模型的性能。由於Keras提供了大量指標,因此為生產模型選擇理想指標是一項複雜的工作。在某些情況下,您可能必須自定義指標(因為Keras根本無法提供所需的指標),這會影響模型的最終性能。

在本教程中,我們不會深入探討每一個指標或何時使用它,我們將使用Keras構建幾個簡單的自定義指標,以進行二元分類。

請始終參考下面的混淆矩陣以了解其餘內容。

混淆矩陣

首先,我們從導入必要的Python庫開始。

import keras.backend as K

精度(Precision)

我們需要記住,y_true和y_pred的操作不是NumPy數組,而是Theano或Tensorflow張量。這就是為什麼我們將Keras後端提供的操作用於指標的原因。

召回率(Recall)或靈敏度(Sensitivity)

特異度(Specificity)

F beta分數

在F-beta分數中選擇beta時,您越想關注召回率而不是精度,應該選擇更高的beta。例如,對於F1分數,我們同樣關心recall和precision,對於F2分數,recall對我們來說是兩倍重要。

在0 <beta <1的情況下,我們更關注精度,因此閾值越高,F beta得分越高。當beta> 1時,我們的最佳閾值朝著更低的閾值移動,當beta = 1時,它處於中間位置。

特異度(Specificity)/靈敏度(Sensitivity)

它是特異度和靈敏度的平均值,我們將其稱為average_metric。請注意,靈敏度與前面定義的recall是同一個函數。

另外,為了確保我的模型不會在某個類上過度擬合,我傾向於在average_metric中添加一個條件操作,我們將調用新指標conditional_average_metric。這背後的直覺是監測靈敏度和特異度的值,如果它們中的任何一個下降到某個水平以下,那麼我們將大幅降低所述度量的最終值。

之所以這樣做,是因為在訓練模型時,Keras並沒有在每個epoch之後保存每個模型,而是為我們提供了監視度量的選項,並根據監視的數量保存最新的最佳模型。

使用首選指標定義機器學習模型

首先,建立模型並選擇您想要監視的首選指標。我們將在這個例子中繼續有三個指標,即conditional_average_metric、specificity、sensitivity。

訓練機器學習模型並保存最佳模型

儘管我們在訓練過程中使用了三個指標,但我們應該僅選擇其中一個指標,即

conditional_average_metric,來保存基於它的模型。訓練模型時,基於監視指標的最佳性能模型將自動保存到指定路徑。

加載預訓練機器學習模型

完成訓練過程後,我們可以按如下所示再次加載機器學習模型。

model = load_model(model_path, custom_objects={'conditional_average_metric': conditional_average_metric, 'specificity': specificity, 'sensitivity': sensitivity})

相關焦點

  • 如何在Keras中創建自定義損失函數?
    Karim MANJRA 發布在 Unsplash 上的照片keras 中常用的損失函數如上所述,我們可以創建一個我們自己的自定義損失函數;但是在這之前,討論現有的 Keras 損失函數是很好的。Keras 中的自定義損失函數可以以我們想要的方式提高機器學習模型的性能,並且對於更有效地解決特定問題非常有用。例如,假設我們正在構建一個股票投資組合優化模型。在這種情況下,設計一個定製損失函數將有助於實現對在錯誤方向上預測價格變動的巨大懲罰。
  • 使用Keras構建具有自定義結構和層次圖卷積神經網絡
    來源:DeepHub IMBA本文約3600字,建議閱讀5分鐘本文為你介紹了如何構建具有自定義結構和層次的神經網絡:Keras中的圖卷積神經網絡(GCNN)。如何構建具有自定義結構和層次的神經網絡:Keras中的圖卷積神經網絡(GCNN)在生活中的某個時刻我們會發現,在Tensorflow Keras中預先定義的層已經不夠了!我們想要更多的層!我們想要建立一個具有創造性結構的自定義神經網絡!幸運的是,通過定義自定義層和模型,我們可以在Keras中輕鬆地執行此任務。
  • 圖像分類入門,輕鬆拿下90%準確率|教你用Keras搞Fashion-MNIST
    原作 Margaret Maynard-Reid王小新 編譯自 TensorFlow的Medium量子位 出品 | 公眾號 QbitAI這篇教程會介紹如何用TensorFlow裡的tf.keras函數,對Fashion-MNIST數據集進行圖像分類。
  • 評測| CNTK在Keras上表現如何?能實現比TensorFlow更好的深度學習嗎?
    作者:Max Woolf機器之心編譯參與:Jane W、吳攀Keras 是由 Franois Chollet 維護的深度學習高級開源框架,它的底層基於構建生產級質量的深度學習模型所需的大量設置和矩陣代數。Keras API 的底層基於像 Theano 或谷歌的 TensorFlow 的較低級的深度學習框架。
  • 淺談keras中的metrics作用-神經網絡評價指標
    #科技新星創作營# #機器學習# #深度學習# #神經網絡#背景介紹最近在用keras寫模型的時候,參考別人代碼時,經常能看到各種不同的metrics,因此會產生這麼幾個問題:metrics評價都對哪些指標進行評價?
  • TensorFlow 2.1指南:keras模式、渴望模式和圖形模式(附代碼)
    我完全喜歡Keras庫的高級方法和Tensorlfow的低級方法,這些方法可以讓我們在需要更多自定義時在後臺進行更改。儘管我一直是Keras-Tensorflow兼容的忠實擁護者,但始終有一個非常具體的缺點:調試功能。如你所知,在Tensorflow中,存在這樣的範例:首先定義計算圖,然後進行編譯(或將其移至GPU),然後運行它。
  • Keras和TensorFlow究竟哪個會更好?
    中 Keras 子模塊 在介紹的過程中我還會展示如何把自定義的 TensorFlow 代碼寫入你的 Keras 模型中。 如何使用自定義的數據集,可參考 https://www.pyimagesearch.com/2018/09/10/keras-tutorial-how-to-get-started-with-keras-deep-learning-and-python/ https://www.pyimagesearch.com/2018/04/16/keras-and-convolutional-neural-networks-cnns
  • Keras vs PyTorch:誰是第一深度學習框架?
    【IT168 資訊】「第一個深度學習框架該怎麼選」對於初學者而言一直是個頭疼的問題。本文中,來自 deepsense.ai 的研究員給出了他們在高級框架上的答案。在 Keras 與 PyTorch 的對比中,作者還給出了相同神經網絡在不同框架中性能的基準測試結果。
  • 初學者怎樣使用Keras進行遷移學習
    訓練數據必須以特定格式存儲,以便饋送到網絡中進行訓練。我們將使用Keras中提供的ImageDataGenerator來訓練我們的可用數據模型。這樣,就代碼而言,該過程變得更加簡單。 必須有一個主數據文件夾,在該數據文件夾中,每個包含相應圖像的數據類必須有一個文件夾。文件夾的名稱必須是其各自類的名稱。
  • Keras結合Keras後端搭建個性化神經網絡模型(不用原生Tensorflow)
    而我們創新主要在於前兩個,因此下面介紹如何結合Keras高級API與後端,自定義特殊神經網絡層以及損失函數。自定義網絡層自定義層可以通過兩種方式實現:使用Lambda層和繼承Layer類。lambda層Lambda層僅能對輸入做固定的變換,並不能定義可以通過反向傳播訓練的參數(通過Keras的fit訓練),因此能實現的東西較少。
  • Keras 2發布:實現與TensorFlow的直接整合
    Keras 已經催生了新的創業公司、提高了研究者的成果率、簡化了大公司的工程流程圖、並為數以千計沒有機器學習經驗的人打開一扇通向深度學習的大門。而我們相信這僅僅是個開始。現在我們推出 Keras 2,它帶有一個更易使用的新 API,實現了與 TensorFlow 的直接整合。這是在 TensorFlow 核心整合 Keras API 所準備的重要一步。
  • Keras R語言接口正式發布,同時公開20個完整示例
    關於keras的介紹Keras是一個高層神經網絡API,為支持快速實驗而生,目前主要功能如下:支持相同的代碼無縫跑在CPU或GPU上對用戶友好,易於快速prototype深度學習模型支持計算機視覺中的卷積網絡、序列處理中的循環網絡,也支持兩種網絡的任意組合支持任意網絡架構:多段輸入或多段輸出模型、層共享、模型共享等。
  • TensorFlow(Keras)中的正則化技術及其實現(附代碼)
    過度擬合:此問題涉及算法過於精確地預測在訓練過程中觀察和學習到的模式實例,從而預測向其呈現的模式的新實例。這可能導致機器學習算法無法準確地推廣到看不見的數據。如果訓練數據不能準確表示測試數據的分布,則可能會發生過度擬合。
  • 初學AI神經網絡應該選擇Keras或是Pytorch框架?
    Powerful,是深度學習入門的絕佳技術路線舉個tensorflow1.0的例子(偽代碼)定義Variable、constant、placeholder等。 初始化global_variables_initializersession回話狀態。
  • 深度學習的學習率調節實踐
    在這項調查中,我們將在MNIST時尚數據集上訓練一個深度MLP,並通過指數增長來尋找最佳學習率,繪製損失圖,並找到損失增長的點,以達到85%以上的準確率。對於最佳實踐,我們將實現早期停止,保存檢查點,並使用TensorBoard繪製學習曲線。
  • 觀點| 我們該如何學習機器學習中的數學
    選自ycombinator博客,機器之心編譯,作者:Vincent Chen,參與:機器之心編輯部。數學在機器學習中非常重要,不論是在算法上理解模型代碼,還是在工程上構建系統,數學都必不可少。通常離開學校後很難有機會靜下心學習數學知識,因此我們最好能通過閱讀小組或讀書會等形式營造環境,並專注學習那些在實踐中常常需要用到的數學知識。
  • 用Keras和「直方圖均衡」為深度學習實現「圖像擴充」
    事實證明,最先進的卷積神經網絡在圖像識別方面的性能已經超過了人類水平。在本文中,我們將討論一些常見的、富有創意的方法,這些方法也是Keras深度學習庫為擴充圖像數據所提供的。之後我們將討論如何轉換keras預處理圖像文件,以啟用直方圖均衡法。我們將使用Keras附帶的cifar10數據集,但是為了使任務小到能夠順利在CPU上執行,我們將只會使用其中的貓和狗的圖像。首先,我們需要加載cifar10數據集並格式化其中的圖像,為卷積神經網絡做好準備。
  • 如何理解和評價機器學習中的表達能力、訓練難度和泛化性能
    在這篇博文中, 我們討論當前(截止到2017年11月)的機器學習研究:監督學習, 無監督學習和強化學習在這些方面的表現。談到模型的泛化性能的時候, 我把它分為兩類:「弱泛化」和 「強泛化」 。我將會在後面分別討論它們。
  • 基於RTX2060構建TensorFlow-gpu(keras)學習平臺
    開始菜單運行anaconda navigator檢查是否安裝了notebook(默認有安裝)三、安裝tensorflow/keras在激活的環境中安裝:1. 如果機器上有gpu,則安裝gpu版本,沒有GPU就安裝cpu版。
  • Keras入門系列教程:兩分鐘構建你的第一個神經網絡模型
    本教程由深度學習中文社區(Studydl.com)持續發布與更新, 本系列其餘教程地址見文章末尾.易於擴展很容易編寫自定義模塊以表達研究的新想法。創建新圖層,損失函數並開發最先進的模型。導入tf.kerastf.keras是TensorFlow實現的 Keras API規範。