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

2021-01-09 不靠譜的貓

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中的metrics作用-神經網絡評價指標
    #科技新星創作營# #機器學習# #深度學習# #神經網絡#背景介紹最近在用keras寫模型的時候,參考別人代碼時,經常能看到各種不同的metrics,因此會產生這麼幾個問題:metrics評價都對哪些指標進行評價?
  • TensorFlow 2.1指南:keras模式、渴望模式和圖形模式(附代碼)
    我完全喜歡Keras庫的高級方法和Tensorlfow的低級方法,這些方法可以讓我們在需要更多自定義時在後臺進行更改。儘管我一直是Keras-Tensorflow兼容的忠實擁護者,但始終有一個非常具體的缺點:調試功能。如你所知,在Tensorflow中,存在這樣的範例:首先定義計算圖,然後進行編譯(或將其移至GPU),然後運行它。
  • MXNet開放支持Keras,高效實現CNN與RNN的分布式訓練
    你可以在 Keras 中進行設計,利用 Keras-MXNet 進行訓練,並使用 MXNet 在生產中運行大規模推斷。用 Keras 2 和 MXNet 進行分布式訓練本文介紹了如何安裝 Keras-MXNet,以及如何訓練 CNN 和 RNN。如果你以前使用過其它深度學習引擎進行分布式訓練,那你可能了解其中的難度和無趣。
  • 在Keras中可視化LSTM
    有沒有想過是否有可能看到每個單元如何對最終輸出做出貢獻。我很好奇,試圖將其可視化。在滿足我好奇的神經元的同時,我偶然發現了Andrej Karpathy的博客,名為「循環神經網絡的不合理有效性」。如果你想獲得更深入的解釋,建議你瀏覽他的博客。在本文中,我們不僅將在Keras中構建文本生成模型,還將可視化生成文本時某些單元格正在查看的內容。
  • 基於RTX2060構建TensorFlow-gpu(keras)學習平臺
    開始菜單運行anaconda navigator檢查是否安裝了notebook(默認有安裝)三、安裝tensorflow/keras在激活的環境中安裝:1. 如果機器上有gpu,則安裝gpu版本,沒有GPU就安裝cpu版。版本問題,現在TensorFlow到了最新的2.0.0版本,但是很多函數不兼容1.**版本。
  • MXNet 宣布支持 Keras 2,可更加方便快捷地實現 CNN 及 RNN 分布式...
    Keras-MXNet 深度學習後端現在可用,這要歸功於 Keras 和 Apache MXNet(孵化)開源項目的貢獻者。Keras 是用 Python 編寫的高級神經網絡 API,以快速簡單的 CNN 和  RNN 原型而聞名。Keras 開發人員現在可以使用高性能 MXNet 深度學習引擎進行 CNN 和遞歸神經網絡 RNN 的分布式訓練。
  • 使用Python和Keras創建簡單語音識別引擎
    語音識別是機器或程序識別口語中的單詞和短語並將其轉換為機器可讀格式的能力。通常,這些算法的簡單實現有一個有限的詞彙表,它可能只識別單詞/短語。但是,更複雜的算法(例如Google的Cloud Speech-to-Text和Amazon Transcribe)具有廣泛的詞彙量,並包含方言、噪音和俚語。
  • 軟體測試性能指標Word版本分享
    注意:該文檔為word文檔,想要模板請回復關鍵字「測試性能指標」。軟體性能指標整理(幫測試節省時間)通過對軟體測試中性能測試的初步了解,總結軟體性能指標中的幾個術語:響應時間、並發用戶數,吞吐量,性能計數器,TPS,HPS。
  • Keras官方中文版文檔正式發布了
    Keras 相對於其它深度學習庫非常容易構建:首先它提供一致和簡單的 API;其次,它提供獨立的、完全可配置的模塊構成序列或圖表以完成模型;最後,作為新的類和函數,新的模塊很容易擴展。這樣說可能比較抽象,但正如文檔中所描述的,我們甚至在 30 秒就能快速上手 Keras。所以在坑外徘徊或準備入坑 Keras 的小夥伴可以開心地開始你們的 30 秒。
  • 如何Keras自動編碼器給極端罕見事件分類
    這種極端罕見的事件問題在現實世界中非常常見,例如,工廠中的機器故障或在網上點擊購買時頁面失蹤。對這些罕見事件進行分類非常有挑戰性。近來,深度學習被廣泛應用於分類中。然而正樣本數太少不利於深度學習的應用。不論數據總量多大,深度學習的使用都會受制於陽性數據的數量。2. 為什麼要使用深度學習?這個問題很合理。為什麼不考慮使用其他機器學習方法呢?
  • 機器翻譯:谷歌翻譯是如何對幾乎所有語言進行翻譯的?
    全文共13204字,預計學習時長34分鐘谷歌翻譯大家想必都不陌生,但你有沒有想過,它究竟是如何將幾乎所有的已知語言翻譯成我們所選擇的語言?本文將解開這個謎團,並且向各位展示如何用長短期記憶網絡(LSTM)構建語言翻譯程序。
  • 用TensorFlow和Keras構建卷積神經網絡
    全文共9940字,預計學習時長20分鐘或更長不同神經網絡結構各有所長。本文主要介紹如何在Python中使用TensorFlow和Keras構建卷積神經網絡。 卷積神經網絡是過去十年中深度學習成為一大熱點的部分原因。今天將使用TensorFlow的eager API來訓練圖像分類器,以辨別圖像內容是狗還是貓。
  • 兩個提高深度學習訓練效率的絕技
    2.2 解決方案採用多進程並行處理,加快CPU加載數據的性能 keras keras 中提供了workers use_multiprocessing來採用多進程方式,並行處理數據,並push到隊列中不同於hadoop和spark等分布式數據處理框架,深度學習訓練因為要涉及參數的前項傳播和反向傳播,有兩種並行方式: 模型並行( model parallelism ):分布式系統中的不同機器(GPU/CPU等)負責網絡模型的不同部分,通常是神經網絡模型的不同網絡層被分配到不同的機器,或者同一層內部的不同參數被分配到不同機器。一般是超大的模型,一張顯卡放不下的情況,如NLP的模型。
  • 對鳶尾花識別之Keras
    *第三方庫numpypandassklearnkeras處理鳶尾花數據集了解數據集鳶尾花數據集是一個經典的機器學習數據集,非常適合用來入門雜色鳶尾 Iris-versicolor(1)維吉尼亞鳶尾 Iris-virginica(2)數據集中三類鳶尾花各含有50個樣本,共150各樣本下面顯示了數據集中的樣本:機器學習中,
  • 通過Keras 構建基於 LSTM 模型的故事生成器
    LSTM 能夠通過更新單元狀態來學習參數間的長期依賴關係,目前在機器翻譯、語言識別等領域有著廣泛應用。LSTM 的使用背景當你讀這篇文章的時候,你可以根據你對前面所讀單詞的理解來理解上下文。 你不會從一開始或者從中間部分閱讀就能夠直接理解文本意義,而是隨著你閱讀的深入,你的大腦才最終形成上下文聯繫,能夠理解文本意義。
  • 深度學習中的模型修剪
    本文討論了深度學習環境中的修剪技術。本在本文中,我們將介紹深度學習背景下的模型修剪機制。 模型修剪是一種丟棄那些不代表模型性能的權重的藝術。 精心修剪的網絡會使其壓縮版本更好,並且它們通常變得適合設備上的部署。
  • TensorFlow、PyTorch、Keras:NLP框架哪家強
    tf.nn.rnn_cell模塊中最重要的類別包括:· 單元層類別(Cell level classes):用於定義RNN的單個單元,即BasicRNNCell、GRUCell和LSTMCell。· 多RNN單元類別(MultiRNNCell class):用於堆棧多個單元,以創建深度RNN。
  • ACL2020|使用強化學習為機器翻譯生成對抗樣本
    再者,強化學習是基於「探索&利用」(explore & exploit)原理進行的無監督學習,當前已在許多人工智慧挑戰中取得很好的成績。其核心在於建模環境交互,以訓練能完成特定目的的智能體(agent)。