简介:电池健康状态(SOH)与剩余寿命(RUL)是电动汽车与储能系统运维的核心指标。传统安时积分、开路电压等方法难以捕捉非线性老化拐点,而深度学习能够从海量充放电数据中自动提取退化规律。通过增量容量分析、多循环滑动窗口等特征工程手段,可将充电曲线转化为清晰的老化指纹;再基于PyTorch搭建SOH回归与RUL时序预测的两阶段架构,并在训练中规避数据泄漏与容量再生干扰。该技术能够支撑电池运维从被动维修走向提前预警,在真实BMS场景中结合在线更新与可解释性分析,为动力电池全生命周期管理提供可靠决策依据。 电池健康状态(SOH)和剩余寿命(RUL)预测是电动汽车和储能系统最核心的痛点之一。车明明还能开,但表显续航突然掉一截;电池看起来没坏,但内阻已经悄悄翻了一倍。这几年我一直在做动力电池大数据分析和深度学习预测相关的工作,用Python从公开数据集和实测数据里挖规律、训练模型,把实验室里的算法逐步往真实场景里推。这篇文章就把我实际跑通的一套流程完整拆一遍,从数据准备、特征工程到模型训练和部署踩坑都交代清楚,给想入坑这个方向的朋友一份能直接照着做的参考。
这个系统的关键点在于:它不是单一模型搞定一切,而是把SOH评估和RUL预测拆成两个任务,共享一套特征提取流程,再分别用不同的模型结构去逼近结果。整套系统基于Python生态,深度学习框架用的是PyTorch,数据处理是Pandas和NumPy,可视化用Matplotlib。下面我从头开始逐层拆解。
1. 为什么动力电池健康预测不能只靠传统方法
1.1 电池老化不是线性过程,传统模型很难抓住拐点
动力电池的老化是一个电化学和热力学耦合的复杂过程。负极表面的SEI膜会不断增厚,正极材料的结构会逐渐坍塌,锂离子活性物质在循环中持续损失。这些微观变化反映到宏观层面,就是容量衰减、内阻增加、倍率性能下降。但这些变化不是匀速发生的,往往在某个循环之后忽然加速,传统经验模型很难提前捕捉这个拐点。
我最早入坑这个方向的时候尝试过安时积分法和开路电压法。安时积分法的问题在于电流测量的累积误差会越来越大,跑几十个循环后容量估算值就漂移得离谱;开路电压法需要电池长时间静置,电动汽车用户不可能每次都等两小时让电池均衡到稳态。等效电路模型需要辨识一堆RC参数,参数拟合在低温或大倍率工况下经常不稳定。
深度学习在这件事上有一个天然优势:它不需要预设电池退化的物理机理,而是通过大量历史充放电数据自动学习容量衰减的时序模式和特征。实验表明,当训练数据覆盖的循环数和温度区间足够大时,模型能够捕捉到肉眼看不出来的退化拐点,SOH预测精度可以稳定控制在2%以内。
1.2 SOH评估和RUL预测是两件事,不能用一个模型硬套
很多刚接触这个领域的人会把SOH和RUL混为一谈,其实它们有本质区别。SOH(State of Health)描述的是电池当前的健康状态,是一个回归问题,输出的是一个0到1之间的数值(或百分比),表示当前最大可用容量相对于出厂额定容量的比例。RUL(Remaining Useful Life)预测的是一个事件型目标:还剩下多少个循环周期,电池容量会衰减到额定容量的80%(这个阈值通常被称为End of Life,EOL)。
SOH评估可以看作一个函数拟合问题,只要有当前循环的特征数据就能输出结果,不依赖未来信息。RUL预测则需要模型从历史退化轨迹中推断趋势,本质上是一个时序预测问题。两者共享特征,但损失函数、样本构造方式和评估指标完全不同。
这个项目里的做法是搭建一个两阶段架构:第一阶段用全连接网络加注意力机制做SOH回归,第二阶段用序列模型(LSTM/GRU)做RUL预测。两个模型共享数据预处理管道和特征工程模块,只是在输入输出层和损失设计上各自独立。这样拆的好处是模型更简单、训练更快、每个任务可以单独调优,而且SOH阶段的输出还能作为RUL阶段的一个额外特征输入,形成信息复用。
2. 数据从哪来:公开数据集和真实工况数据的取舍
2.1 公开数据集是最快的起步方式
做电池健康预测没有数据寸步难行。好在NASA Ames研究中心的PCoE锂电池数据集和马里兰大学的CALCE数据集都是公开可下载的,很多论文都在用。NASA数据集包含锂离子18650电池在不同温度(4℃、24℃、43℃)下的充放电循环老化记录,记录了电压、电流、温度、容量、内阻等关键字段。CALCE数据集则覆盖了更多电池类型和更复杂的充放电制度。
还有一个选择是牛津大学的电池退化数据集,包含8块商用锂离子电池在1C倍率下超过1000次循环的数据,在容量和内阻的测量上做得非常细。这些公开数据集适合用来验证算法可行性,跑通完整的训练和评估流程。
不过要提醒一下,公开数据集普遍存在几个问题:循环次数有限(大多在200到1500次之间)、工况相对单一(多为恒流恒压充放电,缺少动态工况)、电池样本量小(几十块算多的了)。所以公开数据集适合做算法验证和论文复现,工程落地最好还是要有自己平台采集的实测数据。
2.2 实测数据的采集字段和清洗策略
如果条件允许,建议从电池管理系统(BMS)直接采集真实工况数据。采集字段至少需要包含:时间戳、总电压、总电流、各单体电压、温度(至少采样点温度)、累积安时吞吐量、SOC(荷电状态)、充放电状态标志。采样频率不需要太高,1Hz到10Hz足够,太高的采样率会让数据量爆炸,而且预处理成本也指数上升。
数据清洗阶段,我踩过的坑比较典型。首先是充电段和放电段的准确切分,BMS在启停时会有电流波动,不能简单地按电流符号正负来切,需要设置滞回区间,比如电流持续30秒以上大于0.5A才算充电段开始。其次是异常值处理,传感器偶发毛刺会让电压曲线出现尖峰,直接用中值滤波或3σ原则剔除,否则这些异常点会严重干扰特征提取。
第三是缺失值处理,BMS在极端工况下可能出现数据丢包,如果缺失率超过5%的循环数据我一般直接丢弃,缺失率低的用线性插值补上。还有一点很重要:电池数据里经常出现“容量再生”现象——电池静置一段时间后,容量会小幅回升,这在特征曲线上是一个个小毛刺,如果直接用原始曲线做回归会让模型困惑,需要在特征提取阶段特意处理。
2.3 数据划分方式是决定模型泛化能力的天花板
这是这个领域最容易犯错的地方。很多人在划分训练集和测试集时直接随机打乱循环索引,结果模型在测试集上表现惊人,一到真实场景就崩了。原因是同一块电池相邻循环的数据高度相关,随机打乱等于把“已经见过的邻居数据”混进了训练集,这就叫数据泄漏。这种问题的表现就是训练和测试阶段的误差都很低,但部署到新电池上误差会立刻飙升。
正确的做法是严格按电池ID和时间序列划分:比如8块电池里选6块做训练,1块做验证,1块做测试;或者按时间顺序切分,用前70%的循环数据训练,预测后30%的循环。前者测试的是“跨电池泛化能力”,后者测试的是“同一电池的长期预测能力”。实际部署场景通常需要两者兼顾,所以我的做法是把两种划分都做一遍,分别评估模型,效果更全面。
3. 特征工程:从充电曲线里挖出电池老化指纹
3.1 为什么选充电段做特征提取而不是放电段
动力电池的放电过程受驾驶习惯影响非常大,急加速、急减速、上坡、下坡,放电电流的波动剧烈且没有规律。相比而言,充电过程在大多数场景下是相对可控的——无论是交流慢充还是直流快充,充电协议都会把电压和电流限制在一个预设范围内。这意味着充电曲线的形态更稳定,电池老化的信息被更一致地记录下来。
在充电曲线中,恒流(CC)阶段和恒压(CV)阶段的信息量最大。CC阶段的本质是电池以设定的恒定电流充电,电压会逐渐上升;随着电池老化,正负极材料有效容量减少,同样的充电电流会导致电压更快达到截止电压,因此CC阶段的持续时间会缩短。CV阶段的本质是电压恒定为截止电压,电流逐渐下降,老化的电池需要更长时间才能在越来越小的电流下把电量充满,CV阶段的时长会拉长。这两个阶段的变化方向相反,但组合起来就构成了非常清晰的老化指纹。
从CC/CV曲线可以提取一批基础特征:CC段持续时间、CV段持续时间、CC段的电压变化速率、CV段的电流衰减斜率、充电总容量。这些特征对循环次数非常敏感,随着老化单调变化,是最可靠的SOH指示器。
3.2 增量容量分析是把电压曲线变成老化指纹的利器
增量容量分析(Incremental Capacity Analysis, ICA)是动力电池健康诊断的经典方法。它的核心逻辑很简单:把电压-容量曲线求导,得到dQ/dV关于电压的曲线,也就是IC曲线。IC曲线的峰值位置对应电池内部电化学反应的相变过程,峰值高度和宽度则反映活性物质的可用量。
实际操作时,对电压-容量数据做差分会有严重的噪声放大问题。直接对原始数据求导得到的是满是毛刺的序列,峰值根本看不出来。我的做法是先对容量-电压曲线做局部加权回归平滑(LOWESS),然后在统一的电压网格上做插值,最后用Savitzky-Golay滤波器做一阶导数。这样得到的IC曲线干净多了,能够清楚看到三个主要峰值,随着电池老化,峰值的高度逐渐下降,位置向高电压方向偏移。
IC曲线本身可以作为模型的特征输入。把IC曲线的关键峰值高度、峰值电压位置、峰宽等作为特征向量,会比直接用原始电压曲线效果好很多,因为特征降维了,而且物理意义清晰。我在实验里对比过,使用IC派生特征比直接使用原始充放电曲线特征,SOH预测的RMSE降低了大约20%。
3.3 多循环滑动窗口:把单个循环串成退化轨迹
单次循环的特征只能描述某一时刻的健康状态,但电池老化是一个过程,单点特征容易受到噪声干扰。为了让模型看到退化轨迹,我把多个连续循环的特征拼接成滑动窗口序列。比如窗口长度为20,那么第50个循环的样本就是第31到第50循环的特征序列。
窗口长度的选择对预测精度影响很大。窗口太短,模型看到的退化趋势不足,预测波动比较大;窗口太长,模型对最新的变化反应迟钝,而且RUL预测任务中靠近末期的时候没有足够的未来数据。我实验下来,对于NASA数据集这种每个循环记录清晰的场景,窗口长度10到20之间是个甜蜜区间。对于实测BMS数据,由于一个循环可能跨越好几天(比如家用车一周充一次),窗口长度要适当缩短,我更倾向于按充电事件数量来定窗口,而不是按循环数。
每个窗口内还可以加入时序派生特征:窗口内容量的平均值、标准差、线性拟合斜率、最近5个循环的变化率。这些统计特征让模型对局部趋势更敏感,尤其有助于捕捉容量衰减加速的拐点。
3.4 特征选择与归一化:别把原始数据直接喂给模型
把所有特征一股脑塞给模型不是一个好习惯。特征之间的多重共线性会让模型训练不稳定,无关特征会增加过拟合风险。我通常的做法是先计算特征与目标变量(SOH或RUL)的Pearson相关系数,去掉与目标变量相关性绝对值低于0.3的特征,再用随机森林的特征重要性做二次筛选,保留累计重要性在前95%的特征。
归一化在这个领域至关重要。不同电池的出厂容量有差异,不同温度下电压电流的数值范围也不一样,如果不做归一化,模型会偏向数值大的特征。我的标准化方案是:对每个特征分别做Z-score标准化(减去均值除以标准差),而且标准化参数只在训练集上计算,测试集直接复用训练集的均值和标准差。这个细节很重要,如果不小心把测试集数据也混进来计算均值和方差,又是一种不易察觉的数据泄漏。
4. 模型搭建:PyTorch实现两阶段预测架构
4.1 SOH评估模型:全连接网络加注意力机制的实践细节
SOH评估模型的输入是特征工程部分提取的单循环特征向量,输出是当前循环的SOH值。基线模型我用的是一个四层的全连接网络,每层之间加BatchNorm和Dropout。这个基线模型已经能到1.5%左右的误差,但真正把误差拉到1%以下靠的是注意力机制的引入。
注意力机制的思路是对输入特征的不同维度做加权。电池老化反馈在有些特征上强烈(比如CC段时长),在有些特征上微弱(比如充电起始温度)。注意力层可以学习到每个特征的重要性权重,让模型自动聚焦于老化信息最密集的维度。实现上是在全连接隐层输出之后加了一层Softmax注意力,对隐层向量做加权求和,得到上下文向量,再送到输出层。
训练这个模型时有两个关键配置。损失函数用Huber Loss而不是MSE,因为Huber Loss对离群点(容量再生后的测点)更鲁棒。优化器用AdamW,初始学习率设为0.001,配合CosineAnnealing学习率调度器。训练30到50个epoch,Batch size 64,早停的耐心值设为5。实际跑下来,这个模型在测试集上的RMSE能稳定在0.42%到0.75%之间。
4.2 RUL预测模型:从BiLSTM到序列到序列结构
RUL预测任务需要模型同时利用两个维度的信息:当前最近一段窗口的退化状态,以及历史整体的退化趋势。我实验中效果最优的结构是BiLSTM加注意力解码器。
输入是前面提到的滑动窗口序列,每个时间步是当次循环的特征向量。BiLSTM层通过正向和反向两个方向的LSTM捕捉长期依赖——正向捕捉容量随循环递增的单调退化趋势,反向可以帮助模型更好地定位当前时刻在整体退化曲线中的位置。隐藏单元数一般设128,两层堆叠。双向LSTM输出经过Attention层加权求和,再通过两层全连接输出RUL预测值。
如果做更复杂一点的版本,可以把RUL预测构造成一个序列到序列(Seq2Seq)问题:用一个编码器读取历史窗口的退化轨迹,解码器逐步预测未来几个循环的SOH值,然后再从预测的SOH曲线中判断何时穿越EOL阈值。这种方式的可解释性更好,在工程汇报中更好讲,而且可以给出预测置信区间。
无论用哪种结构,RUL预测的训练样本构造都有一个容易踩坑的细节:同一个窗口包含最后若干个循环时,RUL标签可能已经接近0,这时候的样本对训练帮助不大,甚至会让模型产生偏差。我建议对标签在0到10循环之间的样本做降采样或直接剔除。
4.3 训练流程:多个电池的数据怎么喂给模型
把多块电池的数据混合训练时,有几个坑需要特别小心。不同电池的额定容量不同,循环数也不同,不能把整个电池的循环序列硬编码成固定长度。我的做法是每个batch从各个电池中随机采样窗口,确保一个batch内不包含来自同一电池的相邻循环,这样能降低数据之间的相关性,让梯度的估计更稳定。
另外,训练集和验证集的划分需要保证电池级别的隔离。如果6块电池训练、1块验证,要确认验证电池在训练阶段完全没有出现。如果验证集来自训练集电池的后期循环,那验证结果会虚高,因为模型已经从前期循环中学会了这块电池的具体退化模式。
多电池训练时的loss归一化也很重要。不同电池的容量衰减速率差异很大,有的电池100个循环就衰减到EOL,有的300个循环还很健康。直接在原始值域上计算loss,RUL数值大的电池会主导梯度。我建议对RUL标签做Min-Max归一化到0到1之间,训练完成后再映射回真实循环数。
5. 模型评估与结果解读:误差指标之外的判断准则
5.1 SOH和RUL分别用什么误差指标
SOH评估是回归任务,最常用的指标是均方根误差(RMSE)和平均绝对百分比误差(MAPE)。RMSE对大的偏差敏感,MAPE更直观——5%的MAPE意味着平均偏差5个百分点。我的经验是看RMSE的同时一定要看最大误差(Max Error),因为在电池健康管理中,用户感知最明显的往往是最大偏差发生的时刻,而不是平均值。RMSE 0.5%但某个点误差到了5%,在实时监控界面上会非常扎眼。
RUL预测的评价指标是绝对误差(Prediction Error),就是预测剩余寿命和真实剩余寿命的差值,单位是循环数。此外在应用论文中常用的是对每个预测点的误差分布统计,比如95%置信区间内误差不超过正负10个循环。很多论文里只报一个最终预测误差,但那是在电池寿命末期才预测的,早期预测的误差要大得多,需要分时间窗口分别评估。
5.2 一个完整的评估实例:从训练曲线到预测结果分析
我拿NASA B0005到B0018一共14块电池中的数据跑了一遍完整流程。取其中10块电池做训练、2块做验证、2块做测试。训练阶段的loss曲线呈现一个很漂亮的下凹形态,大约在25个epoch时趋于收敛,同时验证集loss在第18个epoch附近达到最低点,然后开始微微抬升,这时候早停机制自动生效,保存了第18个epoch的权重。
在测试集上的结果显示:SOH预测的RMSE是0.52%,MAPE是0.37%,最大误差1.83%(出现在一块低温老化的电池上)。RUL预测在循环早期(剩余寿命120循环以上时)平均绝对误差在正负12个循环左右,到剩余寿命30循环以内时,误差缩小到正负3个循环。这个结果符合预期——模型在评估电池“当下有多健康”方面已经可以作为落地参考,而预测“还能撑多久”更偏向中长期趋势判断,精度会随时间逼近而显著提升。
5.3 单点预测和时间序列预测的评估方式完全不同
很多人在评估RUL预测时犯一个低级错误:只在某一个固定循环点做一次预测,然后报告这个预测的误差,说“我的RUL预测精度很高”。这只能说明模型在某个特定位置上预测得好,不能说明整个生命周期内的预测能力。
正确的评估方法是在测试电池的每个循环点上不停地做滑动预测:从第30个循环开始,每间隔5个循环就用当前观测到的历史数据预测一次RUL,然后画出一条预测误差随循环变化的曲线。这样能看到误差如何随着信息量的增加逐步收敛,更真实地反映系统在部署后的实际表现。
6. 工程落地:从模型训练到上线的完整链路
6.1 模型导出和推理优化
训练好的PyTorch模型不能直接塞进BMS,模型格式和推理速度都需要改造。我的做法是用TorchScript把训练好的模型导出为静态图,这样可以在没有Python环境的C++程序里直接加载运行。推理速度上,SOH模型输入特征是几十维的向量,全连接网络单次推理小于1毫秒,完全可以实时计算;RUL模型的BiLSTM要处理20个时间步的序列,在x86 CPU上大约5到8毫秒,在车规级芯片上会慢一些,但也不会超过50毫秒。
如果需要进一步压缩模型,可以做量化。PyTorch的量化方案可以把模型权重量化为INT8,参数量减少四分之三,推理时间在支持INT8指令集的硬件上能降低2到3倍。不过要注意,对LSTM这类循环结构做量化,精度损失比全连接网络大得多,需要做校准和精度对比,不建议默认开启。
6.2 真实BMS场景的在线更新策略
实验室模型部署到真实车辆后,一定会遇到分布外数据——真实车主充放电习惯五花八门,温度环境千差万别,模型精度会随运行时间逐渐衰退。这就需要一个在线更新的机制。
在系统架构里,我建议采用两级更新策略。第一级是特征漂移监控:每次充电完成后,计算当前循环特征向量与训练集特征中心的马氏距离,当距离超过预设阈值时触发告警。第二级是微调触发:当连续触发告警达到3次以上,从边缘侧收集最近50次完整的充电循环数据,回传到地训练集群,用这些数据对模型做增量微调(选小学习率1e-5,训练5到10个epoch),然后通过OTA下发更新后的权重。
这套机制的核心逻辑是:不能频繁更新,否则模型不稳定;也不能常年不更新,否则误差会越来越大。50次充电循环一般对应一辆家用车一周左右的使用周期,这个频率比较合适,也不会产生过大的数据成本。
6.3 模型可解释性:让预测结果能向工程团队解释
在实际项目中,预测模型的黑盒属性经常被挑战——生产部门不敢用一个解释不了的红线告警去调整电池维护策略。我在项目中添加了SHAP可解释性分析,对每次预测结果输出特征贡献度排序。这样在预测出SOH偏低或RUL剩余较短时,系统能明确指出是哪一个特征贡献最大:是CC段时长缩短了,还是CV段时间拉长了,还是温度特征异常。
这在实际运维中带来了质的变化。之前模型说“该电池需要检查”,现在模型会具体说“该电池的CC段充电时间比健康基准缩短了18%,CV段时间拉长了25%,预计在12个循环后到达EOL阈值,建议优先安排维护”。这种带解释的结论不仅让运维团队更容易接受模型的判断,也帮助我们把模型输出和电池的物理状态对应起来,形成了一个反馈闭环:如果被标记的电池在维护时确实发现了内阻异常增加,说明模型决策是值得信任的。
6.4 系统架构和数据流设计
整个系统的数据流是:BMS原始数据经过采集网关上传到数据平台,Data Cleaner做清洗和切分,Feature Extractor做特征工程,然后在模型服务集群上运行SOH和RUL两个推理服务。推理结果写入时序数据库,同时由告警服务根据阈值触发流程。运维人员通过可视化看板查看每块电池的健康趋势、预测剩余寿命和告警列表。
容灾和降级策略在系统设计里必不可少。如果BMS数据流中断超过24小时,SOH服务还能用最近一次备份的特征做缓存预测,RUL服务就要明确标记为数据不足,不做预测,避免给出无依据的结果。如果流量突增导致推理服务过载,需要一个熔断机制,先丢弃非关键请求,保证核心监控路径的稳定性。
我在实际部署中发现,数据质量的监控和模型服务本身的监控同等重要。做一个数据质量看板,每天展示充电循环数、异常值比例、缺失率、特征分布偏移度,这些指标能提前预警模型可能即将掉精度的情况,比事后看预测误差曲线要主动得多。
7. 踩坑记录与优化经验
7.1 容量再生是训练过程中的隐形敌人
电池老化过程中会出现“容量再生”现象——静置一段时间后电化学活性物质重新分布,容量会回升几个百分点。这在真实使用场景中非常普遍,但对模型训练很不友好。
我一开始没有做任何处理,直接用原始容量数据训练RUL模型,结果预测曲线出现了明显抖动:模型试图学习容量回升的局部规律,反而把整体下降趋势拟合歪了。之后我用了两步处理:第一步是在特征提取阶段不直接用单次循环容量值,而是用滑动窗口的中位数平滑;第二步是在训练RUL时对SOH序列做单调性校正,用类似保序回归的方法把容量序列压成单调非增的形状。处理后RUL预测稳定性明显改善。
7.2 数据泄露的隐蔽变体
数据泄露不只是随机划分这一个问题。我在做特征工程时遇到一个隐蔽的数据泄露:计算滑动窗口的统计特征时,我用的滑动窗口包含了当前循环前后的数据(即中心窗口),导致当前循环的特征“看到了未来”。这在SOH评估任务中会让测试误差虚低很多,但一旦部署到线上,模型就原形毕露。
排查这种问题需要建立严格的特征流水线纪律:任何特征只能回溯历史数据,不能向前看。定义一个特征工程规范——滑动窗口只能用过去的数据,不能用未来数据,无论是训练还是推理阶段都遵守同一个逻辑。这个规范虽然简单,但在整个开发过程中帮我避免了很多地雷。
7.3 电池样本不均衡造成的偏置
公开数据集中很多电池寿命中期的数据很丰富,但寿命末期的数据(SOH低于85%)相对稀少,这会使得模型在关键的寿命末期预测表现不如中间阶段。对比不同SOH区间的预测误差,往往能发现末端误差显著更大。
最简单的应对是重采样:对SOH低于88%的样本做过采样,对SOH高于95%的样本做降采样。更平滑的做法是利用Synthetic Minority Over-sampling Technique(SMOTE)生成合成样本,但要小心SMOTE生成的样本可能打破相邻循环的时序连续性。我的建议是优先做硬过采样和硬降采样,简单直接,不会因为插值引入虚假样本。
7.4 温度对模型预测的影响最容易被低估
电池的容量对温度高度敏感:同一个电池在25℃和0℃下测得的可用容量差异可以达到20%甚至更多。如果把温度特征做得不够充分,模型会把温度导致的容量降低误判为老化导致的容量降低,后果是夏季评估偏乐观、冬季评估偏悲观。
处理温度影响最有效的方式是为每个电池创建标准温度下的容量值。简单说就是建一个容量-温度修正模型,把不同温度下测得的容量归一化到基准温度(比如25℃)下的等效容量。然后再用等效容量序列作为SOH和RUL的目标变量。同时也保留温度特征作为输入,让模型可以有条件地利用温度信息。
做这个项目最大的收获,不是我用了多深的模型,而是明白了在电池健康预测这个场景里,数据和特征工程的决定性权重远大于模型结构。同样的BiLSTM,在特征工程完善的数据上能取得SOTA论文级别的表现;而在原始数据上直接硬跑Transformer,效果反而不如一个朴素的全连接网络。任何深度学习系统的成功都建立在数据质量的基础之上。Python和PyTorch只是工具链条的最后一环,真正的核心是把电池物理知识转化为特征和标签的领域理解能力。
本文还有配套的精品资源,点击获取