电池寿命的确定是手机硬件开发的重要组成部分,但由于电池电化学反应的不确定性和不同的使用环境和习惯,电池寿命已经成为一门玄学。不过柏林的三个小伙伴在原来的预测系统上使用了Tensorflow。更近一步,电池的全寿命预测就完成了。为了整理数据,研究人员统计了原始模型中124节锂电池的充放电循环次数中的数据作为寿命指标。简单来说,就是从充满电到完全放电的一个循环。当循环次数高到锂电池只能保持之前电量的80%时,电池就没电了。研究中统计的电池循环次数从150到2300不等,差异巨大。但是这个过程中的数据不仅仅是计数,过程中输入的连续充电循环可以作为窗口,每个窗口都有一个“当前循环数”和“剩余循环数”。此外,每个窗口都有一个目标值,它基于上一个周期的特征值。在每个电池循环中,还需要统计电池电压、电流、温度和电量的动态变化。并且还会有内阻、充电量、开机时间等量化数据。如前所述,参与研究的电池具有不同的电源循环次数。有的循环次数多,有的循环次数少,时间变化相关的数据不容易统一。毕竟,循环过上千次的电池的电流,不能和刚用过两三次就超龄的电池相比。针对这一问题,研究人员首先以电池在放电过程中的电压变化幅度代替时间作为变化的参考。因为电池的电压范围是一样的,同步就有一个参考范围。然后对随电压变化的电荷量和温度值进行插值,最后以电压为参考,划分范围,完成数据参考。建立模型尽管数据详细清晰,但数组和标量数据显然不能简单地塞进模型中。研究人员使用Keras函数式API作为构建模型的工具,分别导入数组数据和标量数据。对于数组数据,他们将其与窗口的特征数据,如窗口大小、长度、特征值个数等结合起来,形成一个三维矩阵。然后在保证窗口连续性的基础上,利用Maxpooling处理将矩阵分为三个Conv2D函数层。这样就可以提取出相关信息,然后将上面的数据化简为一维数组。前提是数据都具有相同的变化范围并且高度相关。Conv2D所起的作用,就像图中代表颜色通道的数字一样,代表了数据的特征。标量数据的导入过程也类似,只是需要从二维降为一维即可。处理完之后,两个带有featuremaps的平面数组就像处理过的食材一样,可以放心做出模型需要的densenetwork了。训练优化万事俱备,只管练习。研究人员编写了指令集操作界面,方便训练的相关操作。./train.sh如果需要调整trainingepoch和窗口中的样本数,只需要输入这个命令:./train.sh-e70-w10比较trainingvalue和verification的数据趋势值,可以看出,从均值绝对偏差来看,两者的差距在逐渐缩小,曲线趋势逐渐逼近。为了缩小模型与验证值的差距,研究者选择加入Dropout工具进行进一步拟合。此外,研究人员还需要对模型进行超参数调优,因此研究人员针对不同的设置使用了网格搜索。那么如何跟踪这些设置呢?这时候Tenserflow2.0的hparams模块就派上用场了。经过这一系列的操作,研究人员可以比较拟合过程中最关键的参数。因为准确的预测结果要求“当前周期”和“剩余周期数”都大于零。研究人员使用ReLU作为输出层的激活机制,可以减少模型在训练时的搜索范围,节省时间。由于研究人员的模型依赖于CNN,所以他们尝试了不同的kernelsize,最终比较了两种不同学习率下当前循环和剩余循环在不同设置下的MAE值。△误差值对比△当前周期MAE值对比△超参调优后剩余周期MAE值与最优配置模型对比,基于数千个训练epoch,当前周期MAE为90,剩余周期的MAE为115。虽然并不完美,但这个结果非常符合研究人员的应用预期。在线上的预测实际上可以在曲线上看到。模型预测差距最小的位置并不是训练结束,而是训练的四分之三左右。因此,研究人员在这个分界点添加了一个检查点来重置模型,以避免多次训练造成的偏差。模型做好了,现在可以试试把结果转成曲线,然后就可以在线应用了。目前包括当前周期和剩余周期在内的输出曲线大概是这样的。虽然这对电池来说有点“报废”的味道,但对于用户来说确实是一个不错的进步。现实的电池寿命预测只是在原电池容量的基础上粗略参考电池容量的变化。这样的评价方式并没有考虑到不同的使用环境和用户习惯。因为从低温到高温的使用环境,从插充电线24小时到三天不开锁屏,电池循环次数必然会有所不同,这还没有考虑到不同批次的制造差异电池。因此,这种模糊的估计并不能准确表达电池的真实寿命。而这个续航预测模型,随着不同环境下续航相关数据的丰富,可以为用户提供更准确的使用参考。至少它可以提醒你什么时候该换手机了。
