AFCI 应用笔记三、使用 mlflow 管理模型

1. 简介

由于 AI 神经网络涉及多种参数,需要频繁修改各种超参数,比如:learning rate,batchsize,filter numbers,alpha 等等,每个参数都有可能影响到模型最终的准确率,所以比较这些参数之间的差异,并且进行记录和保存,是 AI 算法优化必需的流程。

本文将介绍 python 的一个库:mlflow,可以使 AI 实验的效率更高,提供一种更方便的比较方法。

2. mlflow

mlflow 作为机器学习生命周期的管理包,提供了完整的 AI 开发部署工作流程以及可视化管理:
图1. 机器学习的基本流程
mlflow 模块一共包含 5 个基本组件:

  1. MLflow Tracking:用于记录机器学习所使用的参数,软件版本,模型测试环境等。
  2. MLflow Models:一种模型格式,可以方便部署在各个平台上,并且计算其推理时间。比如:Docker,Apache Spark, Databricks, Azure ML 和 AWS SageMaker。
  3. MLflow Model Registry:中心化的模型商店,包含一系列 API 和 UI。
  4. MLflow Projects:标准化的格式,用于打包可重用的代码,可以运行在不同参数下。
  5. MLflow Recipes:开发高质量模型的预定义模板,包括分类和回归。

2.1. 代码集成

Mlflow 提供了两种方法集成,一种是直接调用 mlflow.autolog(),它支持非常多的主流机器学习框架,比如 scikit-learn, Keras, Pytorch。

如果 autolog 不支持,则可以使用下表中方法,手动进行记录:

名称目的函数调用
Parameters常量(比如, 配置参数)mlflow.log_param,mlflow.log_params
Metrics运行中更新的值(比如,精度)mlflow.log_metric
Artifacts运行中产生的文件(比如,模型权重)mlflow.log_artifacts,mlflow.log_image,mlflow.log_text

2.2. Autolog 和结果展示

Autolog 方法比较简单,以 keras 为例,只需要在训练脚本最前面调用以下代码即可 :

import mlflow
mlflow.tensorflow.autolog()

在本次实验中,我运行了两次 train.py, 然后将 batch size 从 256 修改为 128 再次运行了一次 train.py。

运行完成后,mlflow 会自动生成 mlruns 文件夹,并保存每次的训练参数和结果,默认情况下,保存的模型是最后一次迭代的模型。
图2. Mlflow 自动生成的文件夹和文件
图2. Mlflow 自动生成的文件夹和文件

然后,在 python 执行终端中,进入包含有 mlruns 的目录中,输入 mlflow ui,即可通过本地浏览器打开 web 界面(默认 http://127.0.0.1:5000):
图3. Mlflow table view 主界面
上图 3,记录了三次实验,创建时间,持续时间,并且可以添加其他的实验参数或指标,并支持排序,比如 batch size, epoch, acc, loss 等。
图4. Mlflow chart view 主界面
图4. Mlflow chart view 主界面
上图 4,记录了三次实验的图形比较结果,比如修改了 batch size 后准确率变化了多少,验证集准确率变化了多少等,这些交叉对比参数可以手动修改。

自动记录的参数包括以下 24 个:
图5. 自动记录的参数
图5. 自动记录的参数
自动记录的指标包括以下 6 个:
图6. 自动记录的指标
图6. 自动记录的指标

2.3. 选择性记录

Autolog 非常方便,但是有一个问题,自动记录的模型和指标是最后一次迭代的模型,在某些训练脚本中,可能需要保存验证结果最好的一个模型,如果需要达到这个目的,那么需要使用 2.1 中的方法进行记录。
图7. 记录参数
图7. 记录参数
比如,图 7 中,尝试记录一些参数,也可以记录一些超参数,作为模型选择的对比。
图8. 记录指标
图8. 记录指标
或者,如图 8 中,可以记录测试集的结果,作为新的评估指标。

3. 测试结果

以 AFCI 为例,实践中可能会遇到这样的问题:电流数据的采样率如何设置,分帧长度如何设置,是否需要使用 FFT 等。

这些超参数的设置都很难解释,他严重依赖于具体的数据,实践中可以以测试结果为准。

下面将介绍使用采集到的原始数据进行测试,原始 ADC 采集数据使用了 400KHz 采样率,那么通过降采样很容易得到 200KHz 采样率的数据。同时将分别测试 FFT 和不使用 FFT,帧长设置分别为 512,1024,2048,4096。

同时,记录以下信息:

#记录数据类型,采样率,帧长等信息
mlflow.log_params({"data_type":data_type, \
"sample_rate":sample_rate, "points":points, \
"feature_path":str(feature_path), "data_list":DATA_LIST})
#评估模型的 Precision, Recall, F1-score
Y_pred = model.predict(X_test)
Y_pred = np.argmax(Y_pred, axis=1)
Y_test = np.argmax(Y_test, axis=1)
print(classification_report(Y_test, Y_pred))
#记录精准率,召回率,F1 分数
mlflow.log_metric("Recall", recall_score(Y_test, Y_pred))
mlflow.log_metric("Precision", precision_score(Y_test, Y_pred))
mlflow.log_metric("f1_score", f1_score(Y_test, Y_pred))
#使用 mlflow 记录模型
mlflow.log_artifact(output_path/(model.name +'.h5'))

3.1. FFT 预处理对结果的影响

在这里插入图片描述
图9. 数据类型和指标的关系
从上图可以看到,使用 FFT 预处理后的结果,相对原始数据要更稳定,更好一点。使用ADC 原始数据也可以达到很好的效果,但参数的选择方面需要更加小心。

3.2. 帧长对结果的影响
图10. 帧长和指标的关系
图10. 帧长和指标的关系
从图 10 可以看到,2048 的长度反而达到了最好的 Precison 和 Recall,2048 相比 4096可以节省不少 Ram,是一个比较合适的参数。这里 4096 相对的测试样例比较少,可能需要进一步确认。

3.3. 采样率对结果的影响

图11. 采样率和指标的关系
图11. 采样率和指标的关系
从图 11 中可以看到 200KHz 采样率比 400KHz 更稳定,更容易达到更高的评分。

4. 总结

从上面的分析,可以得到以下基本的信息:

  1. 超参数的选择不是一件容易的事情,需要大量的实验以得到稳定可靠的结论。
  2. 模型实验对数据的质量要求很高,稳定可靠的数据才能得到可靠的结论,否则实际部署会存在较大差异。
  3. 从文中图中可以看到,不一定采样率越高越好,帧长越长越好,相反,较低的采样率和帧长可以大大节省 Flash 和 Ram 的空间,以及减少推断时间。

目前测试进行的实验次数仍然较少,可能得到的结论不一定非常准确,本文中的实验全部使用了相同的数据集和相同的网络模型,以减少评估参数。客户可以根据实际需要,使用更多的模型,更多的测试参数进行实验。

文档中所用到的工具及版本
Mlflow 2.3.0


本文档参考ST官方的《【应用笔记】LAT1339+AFCI应用笔记三、使用mlflow管理模型》文档。
参考下载地址:https://download.csdn.net/download/u014319604/89083052

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/523073.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaSE继承和多态(上)

目录 一.继承的基本使用 1.继承的概念 2.继承的语法 3.父类成员访问 (1)子类中访问父类的成员变量 1.子类和父类不存在同名成员变量 2.子类和父类成员变量同名 (2)子类中访问父类的成员方法 1.成员方法名字不同 2.成员方法名字相同 二.super关键…

Java基础 - 10 - File、IO流(一)

File:代表文本 IO流:读写数据 一. File File是java.io.包下的类,File类的对象,用于代表当前操作系统的文件(可以是文件或文件夹) 注意:File类只能对文件本身进行操作,不能读写文件里…

【Java+Springboot】------ 通过JDBC+GetMapping方法进行数据select查询、多种方式传参、最简单的基本示例!

一、JDBC如何使用、PostGresql数据库 1、在pom.xml 先引用jdbc组件。 <!--jdbc--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency> 2、在pom.xml 再引用p…

【GIS前言技术】今年全球唯一一次日全食要来了!

今年全球唯一一次日全食将于北京时间4月9日凌晨上演&#xff0c;全食带扫过北美洲&#xff0c;墨西哥、美国和加拿大的众多城市都能看到这次日全食&#xff0c;发生时间为当地时间4月8日中午到下午&#xff0c;观赏性比较强。 日全食&#xff08;Eclipse&#xff09;是日食的一…

Linux进程状态深度解析:探索进程的生命周期

文章目录 一、引言1、进程的概念与重要性2、Linux系统下进程状态的意义3、进程状态与系统性能的关系 二、Linux下进程状态概述1、Linux进程状态的分类2、进程状态信息的获取方法 三、Linux下进程状态详解1、运行状态&#xff08;Running&#xff09;2、可中断睡眠状态&#xff…

算法打卡day33|动态规划篇01|动态规划理论基础| Leetcode 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

目录 动态规划理论 定义 动态规划的解题步骤 算法题 Leetcode 509. 斐波那契数 个人思路 解法 动态规划 Leetcode 70. 爬楼梯 个人思路 解法 动态规划 Leetcode 746. 使用最小花费爬楼梯 个人思路 解法 动态规划 动态规划理论 定义 动态规划(Dynamic Programmi…

yarn集群部署

yarn集群部署案例 我们来基于一个案例讲解yarn集群部署 我们要部署yarn集群&#xff0c;需要分别部署HDFS文件系统及YARN集群 Hadoop HDFS分布式文件系统&#xff0c;我们会启动&#xff1a; NameNode进程作为管理节点DataNode进程作为工作节点SecondaryNamenode作为辅助 同…

乐健体育刷分----AI运动的站姿风车

一.前情提要 1.本文仅作学习参考不得用于其他不当途径&#xff0c;若有问题后果自负 二.操作 1.打开乐健体育 2.点击AI运动&#xff0c;找到站姿风车 3.摄像头对准以下图片&#xff0c;拖动图片或保持不动均可 &#xff08;站姿风车2组及以上效果更佳&#xff09;

在实体类中使用JSONObject对象

有时候我们的业务需求可能字段是json格式&#xff0c;这个时候我们的实体类就对应的也应该是json格式&#xff0c;需要使用到JSONObject这个对象&#xff0c;但是可能会使用不了这个对象&#xff0c;那接下来我将简单介绍如何使用这个对象。 以下为我的实体类中的某个字段&…

面试总结------2024/04/04---项目

1.面试官提问&#xff1a;你说你在项目中使用springsecurity jwt 实现了登录功能&#xff0c;能简单讲一下怎么实现的吗&#xff1f; 2.使用RabbitMQ实现订单超时取消功能 redis实现的劣势 订单状态定义 首先&#xff0c;我们需要定义订单的不同状态。在这个示例中&#xf…

ruoyi-vue-pro 前端vue js直接import导入本地文件使用方法

我的xml文件名称叫w2101.xml 第一步&#xff0c;删除所有依赖&#xff0c;否则配置以后就会启动报错&#xff1a; 第二步配置对应的文件格式&#xff0c;我当前使用的是xml文件 config.module.rule(xml).test(/\.xml$/).use(xml-loader).loader(xml-loader).end();第三步…

3D桌面端可视化引擎HOOPS Visualize如何实现3D应用快速开发?

HOOPS Visualize是一个开发平台&#xff0c;可实现高性能、跨平台3D工程应用程序的快速开发。一些主要功能包括&#xff1a; 高性能、以工程为中心的可视化&#xff0c;使用高度优化的OpenGL或DirectX驱动程序来充分利用可用的图形硬件线程安全的C和C#接口&#xff0c;内部利用…

计算机毕业设计选题之基于SSM的旅游管理系统【源码+PPT+文档+包运行成功+部署讲解】

&#x1f493;项目咨询获取源码联系v&#x1f493;xiaowan1860&#x1f493; &#x1f6a9;如何选题&#xff1f;&#x1f351; 对于项目设计中如何选题、让题目的难度在可控范围&#xff0c;以及如何在选题过程以及整个毕设过程中如何与老师沟通&#xff0c;有疑问不清晰的可…

企业如何选择合适自己的ERP系统?ERP系统应该具有哪些功能和特点?

企业如何选择合适自己的ERP系统&#xff1f;ERP系统应该具有哪些功能和特点&#xff1f; ERP作为一款功能如此众多、对企业如此重要的系统&#xff0c;可能会开源免费吗&#xff1f; 如果有这样一款功能全面又完全开源的ERP&#xff0c;早就爆火了&#xff0c;市面上可能还出…

easyocr

刚刚还想更新之前使用的paddleocr&#xff0c;但是发现他的whl文件网站崩了&#xff0c;估计就是最近的事&#xff0c;因为网上所有主流的讲解paddleocr的都用的同一个网站&#xff0c;没办法我顺便也试试github上有没有其他效果稍好的ocr吧 easyocr EasyOCR传送门 这个下载…

文心一言指令词宝典之自媒体篇

作者&#xff1a;哈哥撩编程&#xff08;视频号、抖音、公众号同名&#xff09; 新星计划全栈领域优秀创作者博客专家全国博客之星第四名超级个体COC上海社区主理人特约讲师谷歌亚马逊演讲嘉宾科技博主极星会首批签约作者 &#x1f3c6; 推荐专栏&#xff1a; &#x1f3c5;…

openGauss学习笔记-257 openGauss性能调优-使用Plan Hint进行调优-Custom Plan和Generic Plan选择的Hint

文章目录 openGauss学习笔记-257 openGauss性能调优-使用Plan Hint进行调优-Custom Plan和Generic Plan选择的Hint257.1 功能描述257.2 语法格式257.3 示例 openGauss学习笔记-257 openGauss性能调优-使用Plan Hint进行调优-Custom Plan和Generic Plan选择的Hint 257.1 功能描…

X年后,ChatGPT会替代底层程序员吗?

能不能替代&#xff0c;真的很难说&#xff0c;因为机器换掉人&#xff0c;这其实是一个伦理问题。 其实说白了&#xff0c;任何行业在未来都会被AI或多或少的冲击到&#xff0c;因为ChatGPT做为一个可以持续提升智能的AI&#xff0c;在某些方面的智能程度超过人类并不是什么难…

分闸合闸、电源监视综合装置 HJZZ-91 DC220V 导轨安装Josef约瑟

系列型号&#xff1a; HJZZ-91分闸、合闸、电源监视综合装置&#xff1b; HJZZ-92/1分闸、合闸、电源监视综合装置&#xff1b; HJZZ-92/2分闸、合闸、电源监视综合装置&#xff1b; HJZZ-92/2A分闸、合闸、电源监视综合装置&#xff1b; HJZZ-92/3分闸、合闸、电源监视综合装置…

内网穿透FRPNPSSPPNgrok

目录 穿透上线 FRP&NPS&SPP&Ngrok Ngrok上线 frp上线 nps上线 spp特殊协议上线 穿透上线 FRP&NPS&SPP&Ngrok 主要目的是&#xff1a;实现在自己内网攻击机&#xff0c;去攻击另一个内网的靶机 让一个内网靶机主动连接我们的内网攻击机 Ngrok上线…