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

news2024/10/5 15:22:46

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言——顺序表

文章目录 一、线性表二、顺序表顺序表和数组的区别顺序表的分类1.静态顺序表2.动态顺序表 三、动态顺序表的实现1.动态顺序表头文件2.动态顺序表源文件3.测试源文件 一、线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是⼀种…

软考——数据库系统工程师

时间周期 流水线 IO功能 基本出现的选项中是必考而且基本都是全选 系统总线 后缀表达式 必考2分 答案:B 、 A 用栈来进行计算的。 第一个题先进行36-34的运算,所以是数字后面的第一个符号是减号呀!!! 很重要的知识点…

C语言整数和小数的存储

1.整数在内存中的存储 计算机使用二进制进行存储、运算,整数在内存中存储使用的是二进制补码 1.1原码、反码、补码 整数的2进制表⽰⽅法有三种,即 原码、反码和补码 三种表⽰⽅法均有符号位和数值位两部分,符号位都是⽤0表⽰“正”&am…

27.WEB渗透测试-数据传输与加解密(1)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:26.WEB渗透测试-BurpSuite(五) BP抓包网站网址:http:…

二分答案 蓝桥杯 2022 省A 青蛙过河

有些地方需要解释: 1.从学校到家和从家到学校,跳跃都是一样的,直接看作2*x次过河就可以。 2.对于一个跳跃能力 y,青蛙能跳过河 2x 次,当且仅当对于每个长度为 y 的区间,这个区间内 h 的和都大于等于…

卷积神经网络-批量归一化

卷积神经网络-批量归一化 批量归一化的原理批量归一化的优点批量归一化的应用批量归一化的实现TensorFlow实现:PyTorch实现: 总结 批量归一化(Batch Normalization,简称BN)是一种用于提高深度神经网络训练速度和稳定性…

隐私计算实训营第七讲-隐语SCQL的开发实践

隐私计算实训营第七讲-隐语SCQL的开发实践 文章目录 隐私计算实训营第七讲-隐语SCQL的开发实践1.如何使用SCQL?2.使用流程3.SCQL部署4.SCQL使用示例4.1创建用户4.2创建项目&用户授权4.3创建表4.4设置CCL4.5发起联合分析查询 1.如何使用SCQL? 2.使用流…

Mysql的物理文件

1.Windows下面的配置文件是:my.ini [mysql] default-character-setutf8[mysqld] port3306 default_authentication_pluginmysql_native_password basedirE:/phpStudy/phpstudy_pro/Extensions/MySQL8.0.12/ datadirE:/phpStudy/phpstudy_pro/Extensions/MySQL8.0.1…

【刷题】代码随想录算法训练营第二天| 977. 有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II

目录 977、有序数组的平方双指针法 209、长度最小的子数组滑动窗口 59、螺旋矩阵II 977、有序数组的平方 文档讲解:https://programmercarl.com/0209.%E9%95%BF%E5%BA%A6%E6%9C%80%E5%B0%8F%E7%9A%84%E5%AD%90%E6%95%B0%E7%BB%84.html 视频讲解:https://…

揭秘AI幻觉:GPT-4V存在视觉编码漏洞,清华联合NUS提出LLaVA-UHD

ChatGPT狂飙160天,世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站https://ai.hzytsoft.cn/ 更多资源欢迎关注 GPT-4V 的推出引爆了多模态大模型的研究。GPT-4V 在包括多模态问答、推理、交互在内的多个领…

PCL 点到三角形的距离(3D)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 给定三角形ABC和点P,设Q为描述ABC上离P最近的点。求Q的一个方法:如果P在ABC内,那么P的正交投影点就是离P最近的点Q。如果P投影在ABC之外,最近的点则必须位于它的一条边上。在这种情况下,Q可以通过计算线段AB、…

串口和 蓝牙模块HC08

串口基本认知 串行接口简称串口,也称 串行通信 接口或 串行通讯接口 (通常指 COM 接口 ),是采用串行通信方 式的 扩展接口 。串行 接口(Serial Interface )是指数据一位一位地顺序传送。其特点是 通信线路…

Successive Convex Approximation算法的学习笔记

文章目录 一、代码debug二、原理 本文主要参考了CSDN上的 另一篇文章,但规范了公式的推导过程和修缮了部分代码 一、代码debug 首先,我们将所有的代码放到MATLAB中,很快在命令行中出现了错误信息 很显然有问题,但是我不知道发生…

剪映国际版 v3.7 来了,全功能纯净,附400套离线模板下载

剪映国际版 v3.7 来了,全功能纯净,附400套离线模板下载 相比国内版 国际版不仅没有广告,所有素材和功能都是免费使用的。 CapCut是剪映的国际版本,操作和各种功能几乎和剪映一模一样, 是一款免费无限制使用的视频剪辑软件,软件…

极客时间: 用 Word2Vec, LangChain, Gemma 模拟全本地检索增强生成(RAG)

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

Linux中安装nacos

Linux中安装nacos 一、前言二、准备1、下载2、上传到服务器3、解压 三、配置1、备份配置文件2、导入sql3、修改前4、修改后 四、使用1、启动2、关闭 一、前言 最近国外的docker似乎是出什么问题,试过很多手段都拉不下 nacos 镜像,就打算在服务器装一下 …

二. CUDA编程入门-双线性插值计算

目录 前言0. 简述1. 执行一下我们的第十个CUDA程序2. Bilinear interpolation3. 代码分析总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》,链接。记录下个人学习笔记,仅供自己参考 Note:关于 CUDA 加速双线程插值的内容博主…

golang slice总结

目录 概述 一、什么是slice 二、slice的声明 三、slice的初始化、创建 make方式创建 创建一个包含指定长度的切片 创建一个指定长度和容量的切片 创建一个空切片 创建一个长度和容量都为 0 的切片 new方式创建 短声明初始化切片 通过一个数组来创建切片 声明一个 …

Coursera上托福专项课程01:TOEFL Reading and Listening Sections Skills Mastery 学习笔记

TOEFL Reading and Listening Sections Skills Mastery Course Certificate 本文是学习 https://www.coursera.org/learn/toefl-reading-listening-sections-skills-mastery 这门课的笔记,如有侵权,请联系删除。 文章目录 TOEFL Reading and Listening …

【微服务】面试题(一)

最近进行了一些面试,这几个问题分享给大家 一、分别介绍一下微服务、分布式以及两者的区别 微服务(Microservices)和分布式系统(Distributed Systems)是两种不同的软件架构风格,虽然它们之间有些重叠&#…