资讯动态

机器人动作误差大?先别换硬件,试试数据切分

发布时间:2026/10/18 19:33:31 来源:尧图企业网站定制
做机器人控制这些年我最大的一个感受是很多人一听到“动作误差大”第一反应就是上更贵的伺服、换更高精度的减速机或者是疯狂调PID参数。但我在一次实际的轨迹优化项目中把末端重复定位精度和轨迹跟踪误差降低了近九成而核心改动其实不在硬件也不在控制增益而是在数据层面——具体说是数据切分。这个经验特别适合正在做机器人运动控制、轨迹复现、示教学习或者是利用神经网络做逆运动学映射的工程师。如果你也被“明明模型结构没问题训练也收敛但一上真实机器人动作就歪”这个问题折磨过那这篇文章值得你花十分钟看完。我先说结论你的模型可能没问题你的机器人也没坏问题大概率出在喂给模型的数据上——你没把数据切对。1. 动作误差到底是从哪来的1.1 先把“误差”这件事拆清楚在聊数据切分之前我们得先把误差这件事的账算明白。工业机器人或者服务机器人的动作误差通常可以分成两大类轨迹跟踪误差和绝对定位误差。前者指的是机器人末端实际走过的路径和你指令给的路径之间的偏差后者指的是机器人末端实际到达的点和你期望的指令点之间的空间距离偏差。从我个人的工程经验看一个典型的六轴工业机器人在中速运行比如末端线速度1m/s的情况下轨迹跟踪误差在几个毫米级别是很常见的。如果你做的是涂胶、激光切割、电弧焊这类对轨迹一致性要求极高的工艺这个误差可以直接让你报废一整批工件。而绝对定位误差在没有做任何标定的情况下国产机器人做到±1mm以内已经算不错进口高端机型通常在±0.05mm到±0.1mm这个水平。但这里有个特别容易让人误判的坑很多人测轨迹误差时把机器人从A点直线运动到B点然后只看B点的定位精度发现好像还行就以为轨迹精度没问题。实际上轨迹误差和定位误差是两个维度的事情。机器人走一条直线中间可能画了一条弧线但起点和终点都停得很准——你只测起点终点根本捕捉不到中间那段“画弧线”的误差。1.2 传统误差补偿方案的两大痛点现在工业界最常见的误差补偿手段一个是运动学标定另一个是伺服参数自整定。运动学标定解决的问题是“机器人本身的结构参数杆长、零点位置、减速比和理论模型不一致”通过激光跟踪仪或者高精度测量设备去辨识真实参数然后更新控制器里的运动学模型。这个方法有效但也有它的问题标定设备贵、标定特别是全工作空间标定费时间而且标定结果对负载变化和温度漂移特别敏感。今天标定完了明天换了一套更重的夹具参数又不准了。伺服参数整定解决的是“跟随误差”问题说白了就是让电机的实际位置更快、更稳地跟上指令位置。但伺服整定有一个天然的物理天花板加速度不够、惯量不匹配、机械刚度不足这些问题不是靠调几个增益就能绕过去的。而且伺服层面对轨迹误差的贡献在复杂轨迹高速转角、连续小线段上会表现得非常突出单纯调参收益有限。我在那个项目里最早也是沿着这两条路去试的折腾了两个多星期误差从原来的1.2毫米左右降到了0.9毫米然后就再也压不下去了。后来换了个思路去做数据处理和训练侧的优化才真正打开了局面。这个“换思路”的起点就是重新审视训练和补偿模型时用的数据是怎么组织和切分的。1.3 为什么数据侧会影响物理层面的误差这里需要先解释一个底层逻辑当你在做基于学习或者基于数据驱动的误差补偿时你实际上是希望通过历史数据学习到一个“指令轨迹到实际轨迹”的映射关系然后把预测出的误差反向叠加到指令上。如果数据本身切得不对模型学到的映射就是片段式的、错位的甚至在同一段轨迹里同时混合了加速段、匀速段、减速段的完全不同的动态特性然后模型就会当场“精神分裂”。举个例子机器人在加速段时由于惯量和伺服滞后的原因末端位置通常会滞后于指令位置也就是所谓“跟不上”而在减速段时因为过冲修正末端位置又会超前于指令。你把加速段和减速段的数据混在一起喂给模型模型会倾向于学习一个“平均状态”结果就是加速段补不回来减速段又补过头。这也是为什么我后来坚定地认为做机器人动作误差这件事真正该先看的不是模型结构而是数据切分。数据切分是你所有后续工作的地基地基歪了上层建筑再花哨也没用。2. 数据切分为什么它比模型结构更值得你操心2.1 机器人运动数据天然是非平稳的如果你做过时间序列预测或者时序数据建模你一定听过“非平稳”这个词。平稳性意味着数据的统计特性均值、方差、自相关性在时间维度上保持不变非平稳则相反。机器人运动数据尤其是关节角度、关节速度、末端笛卡尔空间位置和姿态这些原始信号是典型的强非平稳数据。为什么这么说因为机器人在运动过程中任意时刻的动力学特性都是不一样的。启动瞬间有静摩擦到动摩擦的突变高速运动阶段有科里奥利力和离心力的耦合接近目标点的时候又有减速和停顿带来的冲击。关节角速度从0加速到90度/秒再减速到0整个过程中的信号统计特征完全不是同一个分布。你拿一个假设数据同分布的深度学习模型去拟合这种数据本身就是一种错配。更麻烦的是绝大多数的神经网络模型包括MLP、LSTM、Transformer这一类都默认输入数据的分布是相对一致的或者至少变化是平滑的。你把物理上突变期的数据和稳定期的数据混在一个训练批次里模型只能被迫学习出一个“什么都想要但什么都学不好”的折中映射。我当时的第一反应是“那我用更长的输入序列去覆盖整段运动”但后来发现这也不行。序列越长模型需要记忆和关联的信息就越多训练难度直线上升而且一旦出现超出训练数据长度的轨迹预测效果立刻退化。后来我才意识到问题不在于序列长短而在于模型根本不知道“这一段是加速、这一段是匀速、这一段是减速”。2.2 切分本身就是一种先验知识的注入我们做一个很简单的思维实验给定一个时间序列数据不做任何切分直接丢给一个LSTM去预测未来若干时刻的误差和先把数据按照运动阶段切分成段每一段各自建立映射再在预测时根据当前运动状态选择对应的模型或参数你觉得哪种做法更容易学出来答案是后一种而且差距不是一星半点。原因很简单切分这个动作本身就是把工程师对机器人运动规律的先验知识编码进了数据流里。你知道加速段和减速段的误差机理完全不同那么把它们分开建模就是让每一个子模型只学它负责的那一段的动态特性极大地降低了每个子模型的学习难度。这就是整个优化思路中最核心的“认知跃迁”从“让一个万能模型硬学所有情况”转向“让几个专项模型各司其职”。这个思路在机器人领域有一个经典的理论支撑——分区控制或叫分段控制。实际上工业界很早就发现PID参数在运动的不同阶段需要做增益切换才能兼顾快速性和稳定性。我们现在做的事只是把这种分段思想从控制层延展到了数据和模型层。2.3 切分维度不只是“时间”一种很多朋友一听到“数据切分”第一反应就是“把时间序列按窗口截成一段一段”这个理解没错但如果只知道切时间窗那远远不够。以我当时做的项目为例最终误差能降近九成靠的是一套组合式的切分策略至少包含以下几个维度。第一是按运动阶段切分。把单轴或TCP的运动过程切为静止段、加速段、匀速段、减速段、到位稳定段。每一段内部动力学特性相对一致数据分布相对稳定适合单独训练子模型。第二是按轨迹特征切分。比如按轨迹曲率大小来分直线段归直线段大曲率转弯归大曲率小曲率调整归小曲率调整因为不同曲率下机器人的动态响应差异非常大。第三是按载荷状态切分。同样的运动轨迹空载和满载的变形规律、惯性特性完全不同。如果数据里混着多种负载状态最好是按负载状态先分大类再做运动阶段细切。第四是按关节联动关系切分。有些轨迹运动时主要是大臂J1、J2在动手腕轴J4、J5、J6基本不动有些轨迹恰恰相反。各轴负载、惯量贡献差异巨大混在一起训练时模型很难收敛。对多轴联动信号做PCA或者相关性分析后能找到一些天然的“主运动轴”分组按这个分组切分也能显著提升模型效果。我当时实际使用的主策略是第一和第二维度的组合因为项目里负载基本恒定关节联动关系相对固定。你可以根据你的项目灵活调整但多维度切分这个思维方式是通用的。3. 实操环节我是怎么把误差从1.2mm压到0.14mm的3.1 实验平台和数据采集先交代一下平台背景。我当时用的是某国产六轴工业机器人控制器开放了底层指令接口和实时状态读取接口通俗地说就是你能直接给关节角度指令也能以较高频率读回实际关节角度和末端位姿。末端搭载了一个测量精度比较高的激光位移传感器用来作为误差测量的“裁判”——这里有一点很关键误差评估传感器的精度至少要比你期望达到的补偿后精度高一个数量级否则你根本没法区分是补偿算法不行还是测量本身就不准。数据采集频率在100Hz采集了大概几十条不同轨迹的运动数据包括简单的PTP点动、直线插补走矩形、圆弧插补走圆、以及一段模仿实际焊接工艺的复杂连续轨迹。每条轨迹的长度从几秒到几十秒不等。原始数据内容包括时间戳、六个关节的目标角度和实际角度、目标笛卡尔位姿和实际笛卡尔位姿由控制器内部正解给出后续用激光传感器数据做了修正、TCP速度、加速度。采集过程中有一个细节值得你注意时间戳对齐。多源数据合并时如果各路的时钟没有同步哪怕只有几十毫秒的偏差到了模型里就是“指令和实际错位”。我当时用了一个统一授时的采集方案所有数据都打上同一时钟域的时间戳并且在离线分析时通过对运动启动瞬间的互相关分析验证了时间对齐的准确性。3.2 数据预处理的几个关键细节采集到原始数据后不要急着切分先做预处理。这个步骤如果做得糙切分效果直接打折。第一步是剔除异常点。传感器偶发跳变、通信丢包导致的零值或极值这些点如果不剔除会污染切分的边界比如把加速段和匀速段的切分点识别到异常点上。我当时是先画了一遍时间序列图肉眼检查明显离群的点然后用一个基于局部中位数滤波的规则去自动剔除。这一步耗时不多但收益很大。第二步是滤波平滑。关节角度原始数据一般还行但由数值微分得到的角速度、角加速度信号通常噪声很大。我用了零相位低通滤波器scipy.signal.filtfilt重点说一句为什么要用filtfilt而不是普通的lfilter因为普通滤波会引入相位偏移导致滤波后的信号在时间轴上是滞后或超前的。我们后面要做相位切分和误差模型训练信号的时间对齐非常重要相位便宜一点点切分边界就会偏误差模型就学不准。所以这里一定不要图省事。第三步是重采样到统一时间栅格。采集过程中的时间戳不可能是绝对均匀的可能偶尔跳几个毫秒。为了让后续按固定窗口切分时每个样本的时间间隔一致我用插值把所有通道重采样到了一个统一的时间栅格上一般是比原始采集频率稍高一点避免信息丢失。3.3 切分点怎么定相位对齐是灵魂预处理做完就进入重头戏切分。我先把一维的“运动阶段”切分讲透这是所有切分策略里收益最直接、也最容易被做错的部分。“运动阶段切分”说白了就是要在时间序列上标记出哪些点是静止段结尾、哪些点进入加速、哪些点进入匀速、哪些点开始减速、哪些点重新静止。最粗暴的做法是看速度阈值速度小于某个值的算静止大于某个值的算运动。这在低速轨迹上勉强能用但速度曲线常常有毛刺会切出一堆无意义的细碎片段。更稳健的做法是结合加速度符号变化来判断阶段的切换点。我做了一个简单的状态机逻辑初始状态为静止当速度绝对值超过阈值且加速度绝对值同时超过阈值时标记为加速段开始加速段中当速度达到峰值附近且加速度从正变负时标记为匀速段的开始严格来说工业机器人很少存在真正的匀速这里的“匀速”我定义为加速度接近零的一段;当加速度从负方向绝对值较大转为接近零时标记为减速段结束、到位稳定段开始当速度绝对值低于阈值且保持一段稳定时间后标记回静止段。这里最关键的技巧是切分点一定要落在速度过零点或加速度符号翻转点附近并且要对齐到统一的时间基准上。这句话怎么理解你可以把每条轨迹都想象成一条周期性或准周期性的波动信号加速段、减速段就是波峰波谷。你要切分就得让每个片段内的“初始相位”保持一致——比如所有加速段都是从静止开始、速度从零启动所有减速段都从接近最高速度开始向下减。这就是“相位对齐”。相位不对齐会有多糟我再举一个实际案例。我第一次做切分时偷懒用了简单的时间窗平均切分每条轨迹从起点到终点切成等长的10段。结果模型训练完之后不仅误差没降反而在某些转角处出现了更剧烈的抖动。后来我检查发现因为每条轨迹的运动速度分布不均匀等长时间窗在物理上对应的是完全不同的运动阶段——第一段可能包含了静止加速第二段可能是匀速第三段又混了一部分减速和下一段加速。模型学出来的映射在阶段边界处是跳跃的补偿量在轨迹拼接处剧烈突变导致了更严重的抖动。切换成相位对齐的阶段切分之后这个问题立刻消失了。所以哪怕你暂时不做任何模型只是把数据按运动阶段切分并可视化你大概率就能看到加速段的误差模式、匀速段的误差模式、减速段的误差模式完全不一样。这种可视化的验证方法也推荐大家先做一步成本低但会让你立刻信服“切分”这件事的价值。3.4 滑窗切分与特征工程别把窗口重叠设得太小阶段切分解决的是“把物理过程分开”的问题但模型输入仍然需要一个固定维度的特征向量。为此我在每个阶段片段内部又做了滑窗切分把连续的时间序列变成一组固定长度的样本。这里有一个关键参数窗口长度和滑动步长。窗口长度决定了每个样本能看到多长的一段历史信息。我实际对比过几个配置窗口太短比如只有0.1秒模型没足够信息判断当前处于加速的哪个阶段输出误差预测的方差很大窗口太长比如超过1秒样本数量急剧减少而且会把其他阶段的动态特性也包进来又回到了混叠的问题。最终我用的窗口长度是0.3秒对应30个采样点在“信息充分”和“样本量充足”之间找到了一个比较稳的平衡点。滑动步长决定了样本之间的重叠程度。步长越小重叠越多样本量越大但相邻样本高度相关模型训练时会有一定程度的信息冗余且训练耗时会增加。步长太大比如直接等于窗口长度则会让切出来的样本之间完全无重叠可能漏掉一些边界信息。我最终用的是10个采样点0.1秒的步长让相邻窗口有一半以上的重叠既能捕捉连续变化趋势又不至于让样本量失控。特征选择上除了关节目标角度、实际角度、目标笛卡尔位姿、实际笛卡尔位姿外我还特意加了一阶差分和二阶差分相当于速度和加速度的离散近似以及窗口内的均值、极差。这里有个经验不要只输入原始的关节角度一定要加入速度、加速度这种动态特征。误差模型本质上是学习“当前动态状态下的偏差规律”如果没有速度加速度信息模型很难正确区分“当前是加速还是减速”预测出来的补偿方向就可能反掉。3.5 模型与训练简单模型好数据的组合威力数据切分到位之后模型结构反而变成了一个相对次要的问题。我最开始用了一个三层的LSTM输入滑窗特征序列输出未来0.1秒的期望误差补偿量。训练效果不错但还是觉得LSTM训练比较慢后来换成了更轻量的门控循环单元GRU效果几乎持平但训练速度提升了快一半。再后来试过用带残差连接的多层感知机MLP直接对滑窗内的统计特征映射精度略低于循环模型但在某些实时性要求高的场景下也够用。这里我特别想强调一下**“训练/验证/测试集的切分纪律”**。在普通机器学习项目里你通常用随机打乱的方式切分数据。但在机器人轨迹数据上绝对不能这么干。因为相邻时间点的样本强相关随机打乱会造成严重的数据泄漏——模型在验证集上的表现会看起来非常好但一到真实轨迹上就原形毕露。我的做法是按照轨迹来切分而不是按样本点切分。比如采集了20条不同轨迹就随机选16条做训练2条做验证2条做测试保证同一条轨迹的数据不会同时出现在训练集和测试集里。这样才能真正评估模型对“没见过的轨迹”的泛化能力。训练阶段的超参数选择没有什么太多秘籍还是老一套Adam优化器初始学习率设小一点我一般用0.001配合按步衰减的学习率调度批次大小我用的是256训练的终止条件优先看验证集上的误差有没有继续下降而不是简单跑固定轮数。为了防止过拟合我加了早停和权重衰减。说白了在数据切分做到位之后训练流程正常走模型就能给出比较稳定的预测结果。3.6 在线补偿与效果验证模型训练好之后就进入了在线补偿的闭环。整体逻辑是这样的实时读取当前的关节目标位置和实际位置以及速度和加速度等状态信息组成滑窗特征输入模型预测当前时刻的误差补偿量然后把这个补偿量叠加到原本的指令上形成新的修正指令再下发到控制器。这里有一个非常关键的工程细节补偿指令叠加在哪一层。我试过两种方式一种是在笛卡尔空间叠加位置补偿另一种是在关节空间叠加角度补偿。实际效果表明对于大多数关节臂机器人关节空间补偿更直接、更稳因为在笛卡尔空间做补偿要经过一层逆运动学转换补偿量经过非线性映射后可能会被放大或扭曲。但在某些特定场景比如视觉引导中直接在相机坐标系下执行纠偏笛卡尔空间补偿反而更自然。这个要根据你的应用场景来定。在线补偿之后的验证结果让我挺兴奋的在测试轨迹上末端轨迹跟踪误差的均方根RMS从原来的约1.2mm降到了约0.14mm最大尖峰误差从接近2.5mm降到了0.4mm以内整体降幅接近九成。同时因为减速段和停止段的误差被单独建模补偿了到位后的稳定时间也缩短了不少机器人从运动到完全停稳的调整时间减少了大概30%到40%。这对于节拍有要求的产线来说是一个很可观的额外收益。4. 常见问题与排查技巧实录4.1 为什么切分后模型反而变差了有一个问题几乎一定会碰到做完运动阶段切分后模型反而加速抖动甚至比不切分之前更差。这个坑我踩过也见不少同行踩过原因基本可以锁定在以下三点。第一是切分点不准导致片段边界处样本半对半错。如果切分算法选错了边界一段本应属于加速段的数据被当成减速段单独建模模型自然会混乱。解决办法是先手工标注一小部分数据验证自动切分算法的准确性再批量应用。第二是片段数量太少子模型训练样本不足。有些轨迹的“减速段”只占了全轨迹不到5%的时间切出来之后样本量极少模型严重过拟合。遇到这种情况我建议对样本少的阶段做数据增强——比如在原始信号上叠加小幅随机扰动或者重复采样几次也可以把这些稀有阶段放到一个独立的“过渡段”建模而不是硬要细分。第三是滑窗窗口跨越了两个阶段边界。窗口起点在加速段末段终点已经进入匀速段。这样的窗口内同时包含加速和匀速的混合信息模型学习时又回到了混叠状态。我的做法是在滑窗切分时强制要求窗口内部不超过一个阶段边界如果窗口跨越了边界就把这个样本丢弃或者把边界作为窗口的起点/终点重新截取。这一步看起来很简单但对最终效果提升非常明显。4.2 为什么补偿后出现高频抖动在线补偿最常见的副作用之一就是补偿量在相邻控制周期内剧烈变化导致机器人末端出现高频抖动。原因通常是模型预测的补偿量本身不平滑或者是补偿量被直接叠加后没有经过任何平滑处理。解决思路有两个方向。一个是在模型侧做文章尽量在特征里加入相邻时刻的误差差分作为正则项让模型输出的补偿量不会突变或者对预测输出做一阶低通滤波。另一个是在应用侧做文章对补偿指令做平滑处理比如限制单步最大变化幅值、使用平均滤波/滑动平均。但要注意平滑强度不能太大否则补偿的快速响应性会变差误差又回来了。我最终用的方案是对补偿量做截止频率约15Hz的Butterworth低通滤波同时限制了单控制周期内补偿量的最大变化率既能消掉高频抖动又不会影响中低频的误差补偿精度。4.3 如何分析补偿的相位滞后在做实际项目时你一定会遇到一个让人头大的问题误差预测看起来“对”但就是整体偏了一个时间相位——机器人还没开始加速模型就提前给出了一个加速补偿量或者机器人已经进入减速了模型的减速补偿量才姗姗来迟。这种情况通常说明模型学到的时间动力学偏了大概率是训练数据的时序对齐出了问题。排查方法是把模型输出的补偿量和真实误差画在同一张图里观察峰值出现的时刻差。如果峰值总是滞后或超前固定时间量那就是数据对齐的问题回头检查预处理里的时间戳对齐和滤波相位偏移。如果相位差是变化的跟速度有关那更可能是特征里缺失了速度或加速度维度模型只能通过位置变化率去间接推断自然无法做到准确的对齐。4.4 误差降幅达不到预期的自查清单如果你跟着这个思路做了一遍但误差降幅还不到两三成我建议先按下面这个清单自查一下而不是急着换模型。数据采集是否正确覆盖了你实际要运行的所有轨迹类型如果训练数据里只有直线和小幅圆弧那复杂转角轨迹泛化不好是必然的。时间对齐是否严格所有数据是否在同一时钟域下采集有没有做校正这一步出错后续全白做。切分是否为物理阶段切分而不仅是时间窗等分一定要做相位对齐。是否按轨迹切分训练/测试集避免数据泄漏很多“看起来效果不错但现场拉胯”的问题都出在这里。补偿叠加点的选择是否正确关节空间还是笛卡尔空间传感器的测量精度和安装刚性是否足够如果“裁判”本身就软你看到的结果永远不会准。4.5 避坑不要一开始就追求“全自动切分”最后分享一个我自己的经验教训。做数据切分尤其是运动阶段切分我一开始写了一个自动状态机试图让算法一次性把所有阶段的切分点全部标好。结果发现代码越写越复杂边界情况越处理越多最后一把梭跑下来切得乱七八糟。后来我改成“半自动标注”——先用状态机自动给个初版切分结果再在可视化界面上人工检查修正。整体效率反而高很多。这个道理也适用于整个项目先把一两条轨迹彻底做对再批量扩展到全部数据。不要一开始就铺开做全量数据切分。先拿着两三条轨迹把预处理、切分、模型训练、在线补偿的整个闭环跑通误差能降下来信心就建立了剩下的就是把流程规模化而已。5. 从“补误差”到“理解机器人运动特性”5.1 数据切分的适用范围远比你想象中大这个项目做完之后我最大的收获反而是认知上的数据切分不仅仅适用于误差补偿它在机器人领域几乎到处都有用。你做示教学习Learning from Demonstration时如果把演示数据里的“意图规划阶段”和“实际执行阶段”混在一起策略模型就会学到一堆随机动作毫无泛化性。你做轨迹规划时对不同运动阶段采用不同插补策略可以显著降低冲击和残余振动。你做数字孪生时阶段切分后的数据可以让孪生模型更精准地复现物理样机的动态特性。甚至可以这么说数据切分是我认为在机器人数据驱动方向投入产出比最高的技术手段之一。它不需要改硬件不需要换伺服不需要买昂贵的设备纯粹靠对数据本身的理解和整理就能带来数量级的提升。这一点对所有正在做机器人智能化、数据驱动方向的人来说都是一个好消息。5.2 简单方案优先原则很多工程师包括我自己早期容易犯一个毛病拿到问题先想用什么模型、什么框架。我后来被现实狠狠教育过几次之后才明白在数据侧做文章往往比换模型更有效、成本更低。就拿这个项目来说如果用“复杂模型粗糙数据”可能换来的只是过拟合和现场失效但用“简单模型精细切分的数据”你很轻松就能拿到一个可靠、稳定、可解释的补偿方案。这也是我在team里一直强调的一条原则先假设你的模型是对的然后去检查数据如果数据确实没问题再考虑换模型。绝大多数情况下问题出在数据侧。5.3 后续扩展空间这个项目做完之后我其实还留了几个持续优化的方向也分享出来供你参考。一个是多工况自适应现在切分是在离线阶段完成的后续可以尝试在线实时识别当前运动状态并切换模型参数做成一个自适应模块适应负载变化和工况切换。第二个是跨机器人迁移如果同型号的不同机器人个体之间存在一致性差异是否可以基于这个切分框架做一个“基座模型个体微调”的迁移方案。第三个是把切分本身模型化用无监督或半监督的方式学习运动阶段的隐状态划分减少人工标注成本。这几个方向目前还在探索中但基于当前项目的结果我对它们的实际价值还是相当有信心的。最后再分享一个小技巧做数据切分时一定要把切分结果可视化出来画一个包含速度曲线、阶段标记和误差曲线的联动图。你盯着这张图看半小时就能发现很多数字列表里根本看不出来的规律。我自己几乎每个阶段切分的参数选择都是靠这种可视化去验证和调整的。花在可视化上的时间最后都会以降低模型调试成本的方式加倍还回来。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑