過往我們關注模型的訓練結果,會追蹤該模型在每次 epochs 之後的 AUC 、 ACC、 loss 等指標變化,並且以視覺化繪圖方式呈現模型進展,此時擅長分析該模型狀況的 TensorBoard 就很好用。
但是,如果要深入觀察模型「各版次」的狀況時,TensorFlow Model Analysis (TFMA) 可以視覺化分析不同版次的模型狀況,讓您評估是否讓新模型更新上線,而不是把糟糕的模型替代原本的。
TFMA 在 TFX 自動化流程中實現的組件為 ExampleValidator
,讓模型訓練完進行模型驗證,達到持續訓練的目的,續接完成自動部署模型。
更重要的是,模型驗證非常關心模型的「公平性」,善用模型分析工具能抓出模型弱點,進而回頭改進資料與模型。
TFMA 可以做到以下任務:
TFMA 用來評估 TensorFlow 模型的程式庫,可搭配 TensorFlow 來建立 EvalSavedModel
做為分析的依據。使用者可透過這個程式庫,使用訓練程式中定義的相同指標,以分散的方式評估大量資料的模型。這些指標可根據不同的資料片段運算得出,並在 Jupyter 筆記本中以視覺化的方式呈現。
安裝 tensorflow-model-analysis
。
# Upgrade pip to the latest, and install TFMA.
!pip install -U pip
!pip install tensorflow-model-analysis
# Restart Runtime
下載資料集
解析 Schema
使用 Schema 建立 TFRecords 檔案
*.tfRecords
,需撰寫程式將原始資料data.csv
轉換為符合 Schema 的資料型態( int、 float、str)、數據範圍檔案引入。
*.csv
轉為 *.tfrecords
的函數官方範例已寫好。TF keras
、基於 TF2 產生的 API 、 tf.estimator
、 pd.DataFrame
等類型。tf.keras
模型、 tf.estimator
等 2 種做法供您參考,並分別保存為 EvalSavedModel
。tfma.EvalConfig
。
tfma.EvalSharedModel
。tfma.run_model_analysis
創建 tfma.EvalResult
,即可視覺化呈現模型績效。以 tfma.view.render_slicing_metrics()
視覺化呈現模型績效,您可以選擇想要觀察的切片、切換,此範例 slicing_column='trip_start_hour'
。
在圖表中:
Overview
顯示每個切片,Metrics Histogram
是將結果分桶顯示。tfma.EvalSharedModel
時設置的,視需要可增減。更多的嘗試
例如替換切片欄位 'slicing_column=trip_start_day' 觀察。
交叉組合觀察切片。
tfma.view.render_slicing_metrics(
eval_result,
slicing_spec=tfma.SlicingSpec(
feature_keys=['trip_start_hour', 'trip_start_day']))
設定feature_values
篩選特徵值。
tfma.view.render_slicing_metrics(
eval_result,
slicing_spec=tfma.SlicingSpec(
feature_keys=['trip_start_day'],
feature_values={'trip_start_hour': '12'}))
另外也有 tfma.view.render_plot
顯示指定切片與觀察值,勾選 Show all plots 後,您可以看到非常豐富的視覺化圖表。
tfma.ValidationResult
查看驗證結果,如低於門檻值則驗證失敗。
validation_result = tfma.load_validation_result(validation_output_path)
print(validation_result.validation_ok)
# False
tfma.EvalConfig
,這也算是 TensorFlow 比較難以親近的風格吧。