
Time-Series-Library早停调参指南3步设置早停训练不再白烧显卡【免费下载链接】Time-Series-LibraryA Library for Advanced Deep Time Series Models for General Time Series Analysis.项目地址: https://gitcode.com/GitHub_Trending/ti/Time-Series-LibraryTime-Series-LibraryTSLib是一个深度时间序列分析开源库把长短期预测、插补、分类、异常检测五类任务统一在同一套训练框架里。读完这篇你可以在自己的训练命令里配好早停相关的 3 个参数让训练在验证指标不再进步时准时收手测试永远用最优参数。跑一个长时序预测脚本第 10 个 epoch 时 train loss 已经降得很低vali loss 却开始回头往上爬。继续训只是烧显卡最后测试的 mse 反而比第 6 个 epoch 更差。这是典型的没调早停状态模型已经把时序里的主要结构学会了多出来的训练只是在背训练集。图以 TimesNet 为例模型把一维序列重排成二维结构来学习时间模式——验证损失停滞时往往说明这类模式已经学到了原理速览它是怎么决定停下的耐心值 patience验证指标连续 N 轮没刷新纪录就终止训练TSLib 默认 3。监控对象是 vali loss每个 epoch 跑一遍验证集算出 vali_lossutils/tools.py 里的EarlyStopping类据此判断是否刷新纪录。只留最优参数每次 vali loss 创新低就覆写checkpoints/下的checkpoint.pth训练结束后测试加载的是这份最优文件不是最后一轮的参数。图TSLib 支持的任务与评估指标——预测类看 MSE/MAE分类看 Accuracy异常检测看 F1早停的监控口径要和任务匹配三步设置早停第1步patience 和最大轮数怎么设先看 run.py 优化参数区的三个默认值--patience 3 # vali loss 连续 3 轮无改善就停 --train_epochs 10 # 训练轮数上限 --lradj type1 # 学习率衰减策略ETT 这类小数据集用默认的 patience3 就够Traffic、ECL 这种验证集波动大的数据建议运行时追加--patience 5到--patience 8给指标多几次翻盘机会。预期现象日志打印EarlyStopping counter: 1 out of 3连续 3 轮无改善后出现Early stopping并结束训练。仓库没拉过的话先执行git clone https://gitcode.com/GitHub_Trending/ti/Time-Series-Library。第2步学习率衰减怎么和早停联动常见现象vali loss 不降了但也没跌破纪录。默认 type1 每轮把学习率砍半后段训练几乎学不动早停很容易被一两轮抖动触发。常见做法是先降学习率观察一两轮再让早停收手。utils/tools.py 内置了几档衰减策略if args.lradj type1: lr_adjust {epoch: args.learning_rate * (0.5 ** ((epoch - 1) // 1))} elif args.lradj type3: lr_adjust {epoch: args.learning_rate if epoch 3 else args.learning_rate * (0.9 ** ((epoch - 3) // 1))}type1 每轮减半衰减最快适合小数据type3 前 3 轮保持初始学习率之后每轮乘 0.9曲线更平缓适合大数据集cosine 按总轮数做余弦退火后段最稳。预期现象每轮日志出现Updating learning rate to ...。如果降学习率后 vali loss 重新创新低早停计数会归零——这正是联动想要的效果。第3步怎么验证测试用的是最优参数如果你怀疑测试 mse 比训练中途见过的最佳 vali loss 还差先核对 exp/exp_long_term_forecasting.py 的流程每轮结束调用early_stopping(vali_loss, self.model, path)纪录刷新时保存模型循环结束后load_state_dict加载这份最优参数再进测试。也就是说最终指标来自纪录轮的模型而不是最后一轮。elif score self.best_score self.delta: self.counter 1 if self.counter self.patience: self.early_stop True else: self.save_checkpoint(val_loss, model, path) self.counter 0验证时看两处result_long_term_forecast.txt里追加的最终 mse/mae以及test_results/setting/下的预测曲线。把测试 mse 和训练日志里的最佳 vali loss 对比量级一致就说明流程正常。图预测橙色贴近真实值蓝色合适的停点能避免曲线后段与真实值逐渐拉开patience 设置的避坑与对比做法适用场景代价推荐值patience 3 lradj type1ETT 等小数据集验证集波动快后段学习率已很小翻盘空间有限默认组合先跑通再说patience 5~8 lradj type3 或 cosineTraffic/ECL 等大数据集验证指标噪声大轮数变多GPU 时间增加从 patience 5 起步patience 10 赌后段反弹仅当训练结束时 vali loss 仍在缓慢下降大概率白烧显卡还过拟合不推荐️ 最常见的坑是把 patience 调得很大以防万一。实际上验证损失长期走平时模型背的是噪声等的越久最终测试离最佳轮越远。关键入口run.py--patience、--train_epochs、--lradj、--learning_rate等训练参数都在这里声明utils/tools.pyEarlyStopping类与adjust_learning_rate学习率衰减函数exp/exp_long_term_forecasting.py长时序预测训练主循环每轮调用早停并保存最优 checkpointscripts/long_term_forecast/ETT_script/Autoformer_ETTh1.sh可直接运行的 ETT 长时序预测示例脚本照着加参数即可早停的本质就一句话验证损失不再改善就停只留最优参数。你可以现在就去跑一遍示例脚本把--patience 5追加到命令里看日志里是否出现Early stopping——出现了就说明它在工作。【免费下载链接】Time-Series-LibraryA Library for Advanced Deep Time Series Models for General Time Series Analysis.项目地址: https://gitcode.com/GitHub_Trending/ti/Time-Series-Library创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考