chengtan9907 / OpenSTL

OpenSTL: A Comprehensive Benchmark of Spatio-Temporal Predictive Learning
https://openstl.readthedocs.io/en/latest/
Apache License 2.0
730 stars 113 forks source link

提供的训练好的模型中为啥有这种差异? #135

Closed GELIELEO closed 2 months ago

GELIELEO commented 4 months ago

您好,我看了您提供的训练好的模型,发现每个方法有两份训练好的模型,这两份训练好的模型,一个好像是在2080 ti上训练的,另一个好像是在V100上训的,但是前者只需要200个epoch就能够收敛的很好,后者则需要2000个epoch才能达到同样的收敛效果,这是为什么?

oduinihao commented 4 months ago

您好,我目前也在使用这个项目,个人认为原因是这个项目使用了学习率调度器,例如Onecycle调度器遵循根据所处epoch的相对进度调整学习率,总体趋势为从小到大再变小。例如设置学习率为1e-3,对于200epoch来说在第100个epoch时学习率接近最大值1e-3。而对于2000epoch的设置,在前200epoch的学习率都非常小,只有在第1000epoch时才会达到1e-3附近。2000epoch应该是为了更充分的进行训练,并非为了对比训练效率。欢迎随时交流!

chengtan9907 commented 2 months ago

您好,我目前也在使用这个项目,个人认为原因是这个项目使用了学习率调度器,例如Onecycle调度器遵循根据所处epoch的相对进度调整学习率,总体趋势为从小到大再变小。例如设置学习率为1e-3,对于200epoch来说在第100个epoch时学习率接近最大值1e-3。而对于2000epoch的设置,在前200epoch的学习率都非常小,只有在第1000epoch时才会达到1e-3附近。2000epoch应该是为了更充分的进行训练,并非为了对比训练效率。欢迎随时交流!

是的,OneCycle能够快速收敛到较好的效果。2000个epoch的设置是为了充分地训练,训练越久效果越好。我们本来计划是每个baseline模型都训2000个epoch,但有些模型比较慢,最终在OpenSTL里改成200个epoch为标准。