[Day 14] 用 MLFlow 记录模型实验,就。很。快

前言

在整理实验结果之前,先来说说怎麽纪录实验~~
你484常常听到以下对话

A: 哭啊,明天Meeting要报告的实验记录我都还没整理。
B: 你都怎麽记录呢?
A: 我都输出成dataframe然後存在本地啊!
B: 那你要怎麽整理不同模型间的指标?
A: 用Excel...

但就在今天你遇见MLFlow後,
一切都会很美好 :D

MLFlow 简介

他是一款开源的套件,可以帮助我们追踪每次实验的模型参数、模型指标和模型本人。
也可以叫出一个美丽的介面方便我们操作,像是做图、查看模型架构等等。

安装

pip install mlflow

基础范例

有三个函数可以记录:
mlflow.log_param():记录参数(batch_size, epochs 等等)
mlflow.log_metric():记录指标(accuracy, loss 等等)
mlfow.log_artifact():记录额外的东东(模型、训练logs 等等)

import mlflow

epochs = 5
accuracy = [0.6, 0.7, 0.8, 0.9, 1.0]
model_architecture = " Input((None, 100))\n Dense(20)\n Dense(7)"
* # 记录参数
mlflow.log_param('epochs', epochs)

# 记录指标
for epoch in range(epochs):
    mlflow.log_metric('accuracy', accuracy[epoch], step=epoch)

# 记录加工品
mlfow.log_artifact(model_architecture)

超自动记录指令

在训练模型之前加上一句

mlflow.tensorflow.autolog()

就可以自动记录许多东西,
你想的到和想不到的都会记起来。
我都用这招

参考资料

https://www.mlflow.org/docs/latest/tracking.html#adding-tags-to-runs


记录位置所在资料夹

  • 上面所记录的东西会放在mlruns资料夹中。
    0
  • 资料夹结构1:这个0资料夹代表实验0
    1
  • 资料夹结构2:在0资料夹底下有许多名字很乱的资料夹代表实验0run
    每跑一次模型,就会新一个run,例如:1ba8713ed81b422e92accaad547c67ab
    这个run就是保存你所有记录的地方。
    2

除了记录在本地端,也可以记录在Database、HTTP server和Databricks workspace。
8

打开使用者介面

只要在与mlruns同层资料夹下输入指令

mlflow ui
# Output:
INFO:waitress:Serving on http://127.0.0.1:5000

输入 http://127.0.0.1:5000 就能打开 UI 。

  1. 左侧栏位是实验experiment栏位,你做的experiment会依照id排序。
    (预设id为0,实验名称可自订,我订为Select architecture)
    03

  2. 右下侧可勾框代表runs,每一列代表一个run
    (这里我让它按照实验起始时间排序)

  3. 勾选想要比较的runs,按下compare,就能比较两个模型的记录(前提是你有记录)
    05

  4. 可以查看当初设的参数,也可以做出很棒的比较图。
    06
    07

  5. 往下拉到Artifact的地方,可以看到储存的data, model, summary等等。
    所以MLFlow也可你帮你储存模型
    才不会出现「啊!我跑了一整天的模型忘记存QQ」的惨况。
    08


结语

就。很。快。

快。去。用。


<<:  [Day - 14] - Spring 优化应用程序元件注册顺序开发与方法

>>:  sed - 6 Hold Space简介

Cobol 语言和你 SAY HELLO!!

第六天 各位点进来的朋友,你们好阿 小的不才只能做这个系列的文章,但还是希望分享给点进来的朋友,知道...

DAY16-Style Components

前言: 今天我们要来介绍React里很强大的一个工具!没错就是Style Components!废...

D25 - 彭彭的课程# Python 类别的定义与使用

大家今天有没有升旗典礼 欢庆国庆日大家来看飞机载国旗XDD 好的今天继续下一个课程: 类别的定义跟使...

前言&动机

工作时,无可避免的会需要接手别人的程序码,而接手时没意外十之八九都是为了赶工而生、维护性不佳的cod...

[Day 18] 重构我们的测试程序码

随着我们专案功能的增加,虽然目前只有两个函数,但是我们的测试函数已经增加了不少。 为了减少我们未来阅...