Day 23 : 模型分析 TensorFlow Model Analysis (TFMA)

模型分析 TFMA 介绍

  • 过往我们关注模型的训练结果,会追踪该模型在每次 epochs 之後的 AUC 、 ACC、 loss 等指标变化,并且以视觉化绘图方式呈现模型进展,此时擅长分析该模型状况的 TensorBoard 就很好用。

  • 但是,如果要深入观察模型「各版次」的状况时,TensorFlow Model Analysis (TFMA) 可以视觉化分析不同版次的模型状况,让您评估是否让新模型更新上线,而不是把糟糕的模型替代原本的。

  • TFMA 在 TFX 自动化流程中实现的组件为 ExampleValidator,让模型训练完进行模型验证,达到持续训练的目的,续接完成自动部署模型。

  • 更重要的是,模型验证非常关心模型的「公平性」,善用模型分析工具能抓出模型弱点,进而回头改进资料与模型。

  • TFMA 可以做到以下任务:

    • 根据整个训练和保留数据集计算的指标,以次日的评估。
    • 随时间跟踪指标。
    • 用不同特徵切片分析模型性能。
    • 进行模型验证。
  • TFMA 用来评估 TensorFlow 模型的程序库,可搭配 TensorFlow 来建立 EvalSavedModel 做为分析的依据。使用者可透过这个程序库,使用训练程序中定义的相同指标,以分散的方式评估大量资料的模型。这些指标可根据不同的资料片段运算得出,并在 Jupyter 笔记本中以视觉化的方式呈现。

模型分析 TFMA 实作

  • 本篇将以官方范例示范,您可以跟着使用 Colab 实作范例 ,但因范例略显臃肿,建议配合本文服用。

1. 建立 TFMA 环境

  • 安装 tensorflow-model-analysis

    • 模组须重启 Colab 执行阶段( Restart Runtime) 再执行後续操作。
      # Upgrade pip to the latest, and install TFMA.
      !pip install -U pip
      !pip install tensorflow-model-analysis
      # Restart Runtime
      
  • 下载资料集

  • 解析 Schema

    • Schema 档案源自 TFDV,如果没有的话可以参见 Day 14 介绍,将手上有的资料集透过 tfdv.infer_schema 产生及定义 Schema。
  • 使用 Schema 建立 TFRecords 档案

    • 配合 TFMA 输入资料集格式 *.tfRecords,需撰写程序将原始资料data.csv 转换为符合 Schema 的资料型态( int、 float、str)、数据范围档案引入。
      • 范例中,新增 "big_tipper" 特徵以布林值表示小费是否大於票价20%。
    • *.csv 转为 *.tfrecords 的函数官方范例已写好。

2. 设置和执行 TFMA

  • TFMA 支持模型类型参见格式介绍,包含 TF keras、基於 TF2 产生的 API 、 tf.estimatorpd.DataFrame 等类型。
  • 此范例展示 tf.keras 模型、 tf.estimator 等 2 种做法供您参考,并分别保存为 EvalSavedModel
  • TFMA 支援在模型训练期间的评估模型绩效。
  • 接着步骤为:
    • 设置 tfma.EvalConfig
      • 在此设定哪个栏位是您的y标签,评估机械时使用哪些指标,准备要产生哪些观察切片。
    • 设置 tfma.EvalSharedModel
    • 使用 tfma.run_model_analysis 创建 tfma.EvalResult ,即可视觉化呈现模型绩效。

3. TFMA 视觉化模型绩效

  • tfma.view.render_slicing_metrics() 视觉化呈现模型绩效,您可以选择想要观察的切片、切换,此范例 slicing_column='trip_start_hour'

  • 在图表中:

    • Visualization 可以切换2种样貌,Overview 显示每个切片,Metrics Histogram 是将结果分桶显示。
    • Examples (Weighted) Threshold 可以设定显示的门槛值,超过门槛值才会显示。
    • Show 所呈现的观察指标是您在 tfma.EvalSharedModel 时设置的,视需要可增减。
    • 示范中展示了某些时段 precision = 0, recall = 0 的状况,透过 Sort 更清楚。
  • 更多的尝试

    • 例如替换切片栏位 '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 後,您可以看到非常丰富的视觉化图表。

4. 追踪随着时间推移的模型

  • 在您训练好模型,您会希望测试模型时使用生产情境产生的,毕竟那才是模型会遇到的真实反映。TFMA 可以帮助您持续监控与衡量模型性能。
  • 先储存储存每个模型评估结果,范例展示了t0日到t2日的变化,在视觉化图表中预设显示AUC,您还可以新增比较图。

5. 模型验证

  • TFMA 可以同时评估多个模型,通常是比较基本模型与新模型之间的状况,譬如可以锁定新模型的 AUC 等绩效要超过 Baseline,在设定好门槛值後,以 tfma.ValidationResult 查看验证结果,如低於门槛值则验证失败。
    validation_result = tfma.load_validation_result(validation_output_path)
    print(validation_result.validation_ok)
    # False
    

小结

  • 本篇让您对 TensorFlow Model Analysis (TFMA) 工具有更多的认识,验证随着时间推移的模型对於用於检测已部署在生产情境的模型相当重要,TFMA 设计为可以直接产生验证结果,也可以视觉化呈现。较不方便的是需要有 Schema 及设定 tfma.EvalConfig ,这也算是 TensorFlow 比较难以亲近的风格吧。
  • 希望能降低您使用 TFMA 工具的门槛,尽力采用 Gif 呈现,再不行要拍影片了...。
    /images/emoticon/emoticon07.gif

参考


<<:  [Day 08] 从 tensorflow.keras 开始的 VGG Net 生活 (第一季)

>>:  【从零开始的Swift开发心路历程-Day11】XIB

软件开发执行方式 - SCRUM

在软件开发中很常听到 SCRUM 这个字,本身是待在软件业当PM公司没有跑到非常正规的 SCRUM ...

[Day28]初探Firebase Cloud Messaging for Flutter

大家好,今天要来尝试使用firebase_messaging,今天使用的是Android手机 首先到...

Day 21 | 3D蛇走迷宫AR游戏开发Part2 -角色蛇移动

昨天的文章已把场景与平面侦测做好,今天要继续说明角色蛇的移动 目录 移动机制说明 变数宣告 介面按钮...

[Day02] 简单学习 Kaggle Notebook,以及 Kaggle 各种称号等级

[ 30 Days of ML Challenge | D02] 今天提供两个文件,一个就是带你熟悉...

AAC 转档 MP3

对於AAC 这个音讯格式,可能大多数人都不太熟悉。但是AAC 是 iTunes 里常见的音乐档案格式...