星级打分
平均分:5 参与人数:1 我的评分:未评
本帖最后由 奇奇怪怪的ID 于 2024-9-23 02:32 编辑
前段时间写了个周期性自定义的重复训练代码,效果是有的,可是我始终感觉不对劲,毕竟我这个半桶水不是专业的,所以磨蹭了好些天
周期性自定义的重复训练代码:
1.周期性训练:沿着MVE原代码逻辑,根据周期提取周期内loss最高一批样本进行复训一次
2.自定义复训次数:周期内loss最高一批样本根据用户自定义的次数重复
问题出在控制台(CMD)输出的保存阶段均值,
假设用户设定周期10,自定义重复次数为10次,保存的间隔一致,
保存阶段正常输出,不开启周期复训:
{[[0.1891],[0.1760],[0.1789],[0.1909],[0.1567],[0.1687],[0.1888],[0.1628],[0.1789],[0.1689],[0.1891],[0.1760],[0.1789],[0.1909],[0.1567],[0.1687],[0.1888],[0.1628],[0.1789],[0.1689]],
[[0.1860],[0.1750],[0.1789],[0.1814],[0.1667],[0.1689],[0.1788],[0.1728],[0.1689],[0.1789],[0.1791],[0.1560],[0.1489],[0.1809],[0.1767],[0.1697],[0.1788],[0.1728],[0.1769],[0.1659]]}
那么正常的保存阶段均值为
保存时间| 迭代次数 |单次时间|SRC损失|DST损失|状态
[08:57:05][#14087135][0465ms][0.1767][0.1757][正训]
相同的时间保存阶段正常+复训输出(假定复训降幅每次0.01),开启周期复训:
{[[0.1891],[0.1760],[0.1789],[0.1909],[0.1567],[0.1687],[0.1888],[0.1628],[0.1789],[0.1689],[0.1899],[0.1799],[0.1699],[0.1599],[0.1499],[0.1399],[0.1299],[0.1199],[0.1099],[0.0999]],
[[0.1860],[0.1750],[0.1789],[0.1814],[0.1667],[0.1689],[0.1788],[0.1728],[0.1689],[0.1789],[0.1760],[0.1689],[0.1589],[0.1489],[0.1389],[0.1289],[0.1189],[0.1089],[0.0989],[0.0889]]}
那么正常+复训的保存阶段均值为
保存时间| 迭代次数 |单次时间|SRC损失|DST损失|状态
[08:57:05][#14087135][0465ms][0.1599][0.1544][正训]
我就是觉得影响观察的准确性下降,同时还考虑到两点
1.如果素材存在错图错特征(噪声或异常值),很容易影响模型的泛化能力,通常这种素材loss是最高的,过多的重复训练可能会使模型对这些不理想的特征过于敏感
2.早停策略,如果素材的重训效果不再提升,训练应该被停止,可能因为各种异常因素导致的,也可能最终平均损失值已经是最低了训练效果已经到了极限
基于以上考虑,我做了如下改动
将排序高loss的周期性的代码删掉,设置动态阈值(每次自动保存都会重新计算)动态阈值=上一保存阶段dst和src的均值-0.005,复训次数还是用户自定义,判断每一次正常迭代的dst_loss或src_loss大于阈值并且还没达到用户自定义次数时才进入复训
1.设置模型参数mean_loss用来记录,每次保存模型时,将保存阶段的dst_loss和src_loss计算平均值写入到模型参数mean_loss,用于动态阈值
2.当dst_loss和src_loss均小于阈值或达到用户自定义次数时跳出复训回到正常提取素材训练
同样的,复训次数只代表上限,当进入复训的批次dst_loss和src_loss都小于阈值或达到用户自定义次数时同样会退出复训
目前下降稳定,曲线也平均许多,希望能够达到预期............
ps:刚写好还没长时间观察过
|