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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何保证全部流量走代理

最近因为某些原因,需要做一些确保高匿的事情,便花时间做了一定的调研,至于是什么事情这里不便多说。 本文主要还是聊聊我看到的一些使用代理软件误区和确保流量全部走代理的方法,甚至也可以说是Proxifier的用户使用手册&#xff…

2023年下半年中级软件设计师上午真题及答案解析

01 02 03 04 05 06 07 08 09 10 篇幅有限,私我获取免费完整 pdf文件

如何在Linux中安装软件

文章目录 一、Linux应用程序基础1.Linux软件安装包分类2.应用程序和系统命令的关系3.常见的软件包的封装类型 二、安装软件的方式1.RPM包管理工具2.yum安装3.编译 一、Linux应用程序基础 1.Linux软件安装包分类 Linux源码包: 实际上,源码包就是一大堆源…

海纳斯删除广告位

找到文件 vim /var/www/html/home.php 删除代码段 <div class"adleft" id"adleftContainer"><button onclick"closeAd()">关闭</button><a href"https://www.ecoo.top/ad.html" target"_blank">&l…

bugku-misc 啊哒

拿到题目得到一张图片 尝试查看属性看到照相机型号 应该是加密字符&#xff0c;用010打开图片查看源码 文件结尾看到50 4B&#xff0c;是压缩包形式并且看到flag.txt 猜测是文件包含 kali用foremost尝试分离图片 得到zip文件&#xff0c;打开显示需要密码 想到一开始图片属…

GESP Python编程五级认证真题 2024年3月

Python 五级 2024 年 03 月 1 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 第 1 题 下面流程图在yr输入2024时&#xff0c;可以判定yr代表闰年&#xff0c;并输出 2月是29天 &#xff0c;则图中菱形框中应该填入&#xff08; &#xff09;。 A. (yr % 400 0…

LDR6328助力Type-C普及,便捷充电,绿色生活更精彩

随着科技的进步和全球统一接口的需求&#xff0c;Type-C接口正日益受到青睐。越来越多的设备正选择采纳这一先进的接口设计&#xff0c;它的普及无疑在改善着我们的日常生活。 在过往&#xff0c;许多小功率设备如小风扇、蓝牙音箱、桌面台灯以及家用加湿器等&#xff0c;都普遍…

在ChatGPT中,能用DALL·E 3编辑图片啦!

4月3日&#xff0c;OpenAI开始向部分用户&#xff0c;提供在ChatGPT中的DALLE 3图片编辑功能。 DALLE 3是OpenAI在2023年9月20日发布的一款文生图模型&#xff0c;其生成的图片效果可以与Midjourney、leonardo、ideogram等顶级产品媲美&#xff0c;随后被融合到ChatGPT中增强其…

20.2k stars项目搭建私人网盘界面美功能全

Nextcloud是一套用于创建网络硬盘的客户端&#xff0d;服务器软件。其功能与Dropbox相近&#xff0c;但Nextcloud是自由及开放源代码软件&#xff0c;每个人都可以在私人服务器上安装并执行它。 GitHub数据 20.2k stars561 watching3.2k forks 开源地址:https://github.com/ne…

博弈论(Nim+sg)

Nim游戏 给定 n 堆石子&#xff0c;两位玩家轮流操作&#xff0c;每次操作可以从任意一堆石子中拿走任意数量的石子&#xff08;可以拿完&#xff0c;但不能不拿&#xff09;&#xff0c;最后无法进行操作的人视为失败。 问如果两人都采用最优策略&#xff0c;先手是否必胜。…

Android Studio学习15——多页面情况下再看Activity生命周期

按返回键退出APP时&#xff1a; 走正常页面的退出流程&#xff1a;onPause–>onStop–>onDestroy(会Destroy,因为它从任务栈中退出了) 再点击图标回来时&#xff1a; 走正常页面的创建流程&#xff1a;onCreate–>onStart–>onResume 按Home键退出App时&#xff1a…

测试基础|为啥大多数功能测试会觉得测试平台不好用?自动化测试的几点思考

一、接口自动化到底要验证什么 个人觉得做什么事情前&#xff0c;应该想下做的动机和想要达成的目的&#xff0c;这样会减少很多不必要的弯路。 1. 自动化的原因 测试界普遍认为应该加自动化用于提高测试效率和保障&#xff1b; 测试kpi任务&#xff1b; 应对需要频繁执行…

0基础如何进入IT行业?

0基础如何进入IT行业&#xff1f; 简介&#xff1a;对于没有任何相关背景知识的人来说&#xff0c;如何才能成功进入IT行业&#xff1f;是否有一些特定的方法或技巧可以帮助他们实现这一目标&#xff1f; IT 行业可能是当今门槛最低的行业之一&#xff0c;想要进入 IT 行业&a…

【机器学习·浙江大学】机器学习概述、支持向量机SVM(线性模型)

机器学习概述 机器学习 特征提取(feature) 根据提取的特征构造算法&#xff0c;实现特定的任务⭐&#xff08;这门课程的重点&#xff1a;假设所有的特征已经存在且有效&#xff0c;如何根据这些特征来构造学习算法&#xff09; 如下图所示&#xff0c;机器学习主要就是来进行…

FreeRTOSFreeRTOS列表和列表项

FreeRTOS列表和列表项 今天继续跟着正点原子学习FreeRTOS列表和列表项的内容。列表和列表项这个知识点用到了C语言链表的知识点。所以必须对C语言中的链表这个数据结构才能更好的理解这部分内容。TIPS&#xff1a;正点原子这节课内容讲的特别好&#xff0c;强烈推荐&#xff1…

基于SSM的基于个人需求和地域特色的外卖推荐系统(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的基于个人需求和地域特色的外卖推荐系统&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…

关于 Python 的 import,你了解多少?

多线程和多进程是 Python 中两种实现多任务的不同策略&#xff0c;二者都可以在特定的场景下在一定程度上提高程序的运行速度、性能以及吞吐&#xff0c;但二者的运行机制却有很大的差别。 在 Python 中&#xff0c;多线程以_并发&#xff08;concurrent&#xff09;的方式运行…

Chapter 1 Basic Concepts of Communication and Communication Systems

1.1 The Concept of Communication communication【通信】:It is the process of using signals to transmit messages containing information in space. To put it simply, communication is the spatial transmission of information【信息的空间传递】Information【信息】…

C语言数组:数据的集合艺术(续)

前言 在上一篇文章中&#xff0c;我们深入探讨了C语言数组的基本概念、操作以及多维数组的应用。今天&#xff0c;我们将继续探索数组的更多高级特性&#xff0c;包括动态内存分配、指针与数组的关系以及数组在实际编程中的应用案例。 一、动态内存分配与数组 在C语言中&…

Unity开发一个FPS游戏之三

在前面的两篇博客中&#xff0c;我已实现了一个FPS游戏的大部分功能&#xff0c;包括了第一人称的主角运动控制&#xff0c;武器射击以及敌人的智能行为。这里我将继续完善这个游戏&#xff0c;包括以下几个方面&#xff1a; 增加一个真实的游戏场景&#xff0c;模拟一个废弃的…