LabHub
学习 学习路径 课程

AI瘦身失败事件

数字相同,单位却不同

在 LabHub 中继续学习

一句话总结

必须固定输入单位和样本的作用,才能进行模型比较。

概念图: 一句话总结 · 为什么需要这个? · 怎么行动 · 在现场相遇的样子

为什么需要这个?

想象一下,把快递分类机器人的数字读取器搬到一个小装置上。在开发PC上读取好的模型在部署后数字错误。模型文件正常打开,也没有错误日志。这种故障只能在程序运行时才能发现,不能通过检查输入单位和数据分割来发现。从输入单位和数据分割开始进行固定,才能找到以后更改的结果的原因。

在本课程中,我们将收到已经学习的小型手写分类器。这不是新的模型学习竞争,而是模型转换和验证的课题。需要Python函数、列表、JSON、NumPy数组的基础知识。在没有GPU或实物机器人的情况下,在Linux CPU上运行,实际MCU、NPU的速度或功耗无法通过这个练习来证明。

怎么行动

提供的digits数据是以8×8图像为特征的64个展开的数组。像素值为0–16。仅仅因为是常见的图像,如果按255进行除法,学习时和输入范围就会不同。normalize(pixels)需要转换为float32数组,并进行除以16,保持输入形状。不需要修改原始数组本身。

图像的像素值和样本ID不同。ID是识别原始数据行的不定数。digits.npz中的x_train·x_calibration·x_test有图像,y_test有评估正确答案,ids_train·ids_calibration·ids_test有每个分区的ID。提供的分区是1,077个学习,360个校正,360个评估。不重新抽取分区,直接使用提供的ID。

校正资料是确定转换器的数字范围的材料,评价资料是转换后判断质量的材料。通过查看评价正确答案,选择校正样本提高成绩时,两者的作用是混合的。在校正文件中包含一个评价ID的情况也是泄露。不要只计数ID的数量,要确认集合和重复性。但是,重复使用这个小公开评价集合的成绩不是独立的现场泛化性能。

在现场相遇的样子

预处理函数是数据团队和应用程序团队之间的一个小API。一边期望0-1个错误,另一边即使输入0-16个整数,如果数组大小相同,调用也可以成功。因此,合同不仅需要特征数,还需要数据类型和值的范围。在处理摄像头、传感器输入的实际系统中,还会附加通道顺序、时间单位、缺失值处理。这次输入没有故意加入其复杂性。首先确认一个范围出错时错误是如何安静地传播的。

请先在纸上做一下简单的计算。如果三个像素为0、8、16,正确的归一化结果是0.0、0.5、1.0。除以255,即使是最后一个值也约为0.0627。从程序的角度来看,两者都是有限的错误,所以不会出现例外。模型相当于收到与平时不同的黑暗输入。这就是为什么需要区分没有错误的事实和输入正确的事实。

需要区分修改整个数组的函数和返回新数组的函数。如果改变原始x_test,在同一进程中评估下一个模型时,可以再一次分配已归一化的值。因为每个模型的评估输入不同,所以会因量子化而错误地解释性能差异。这次normalize合同会保留输入数组。单独函数测试除了实际样本之外,还会放入全部为0的行和全部为16的行,以确认两端值。

选择ID可以分成“数量、重复、集合”三个问题,这样比较方便。请分别回答是否包含360个,是否重复输入相同的ID,是否与提供校正集合相同。最后一个问题无论顺序如何都必须通过。因为固定顺序会拒绝以不同的顺序阅读相同资料的正常实现。如果只是从0到359填写,就会遗漏ID代表原始的哪一行。读取校正样本时,只要制作一个从原始ID中找到校正数组内行位置的对应表就可以了。

因为已经学习的FP32模型和数据是固定的,所以从相同的字节开始。但这个资料并不代表手写的所有风格。公开资料的再现性和实际客户输入的代表性是另一回事。在现场部署之前,必须收集单独的手写、拍摄条件、污染状态的数据进行评价,不能因为这个过程的高成绩而省略这项工作。在接下来的测验中确认输入和分割后,进入最后一个模块的综合实践。

下次实习要做的事情

在1-3阶段,在contract.json中记录输入的合同,实现preprocess.py的正则化函数,只在calibration.json中存储校正用的ID。首先检查单位是否正确,确认哪个测试能抓住这一点。第一阶段以读取提供数组的形状和长度的一个小成功开始。

资料来源:scikit-learn load_digits, UCI原始资料. 原资料的作者·CC BY 4.0标记也提供在DATA-LICENSE.json中。