Liu Zicheng
Liu Zicheng
你好,我认为是正常现象,而且inverse设置为false比较合理,以下是我的训练时inverse分别设为false和true的截图:   inverse在数据中的作用为:在提供标签batch_y时,是否使用inverse+拼接的方式来提供,具体可见data/data_loader.py中的各个get_item()函数和exp/exp_informer.py中的训练过程。inverse为True,seq_y会由data_x某片段的末端label_len长度的数据和data_y中后续的pred_len长度的数据拼接而成;反之,seq_y会完全由data_y提供。data_y是原数据,data_x是由data_y进行归一化而来。 由于在训练过程中用于计算loss的部分来自于后段pred_len部分,因此inverse为True时,会出现训练目标(喂给encoder的数据)和预期目标(喂给decoder的数据)的格式不一致的情况(或者说数据的形态?我觉得data_x和data_y像是有某种不统一性),因而导致loss飙升,我觉得这样不太合适。 不过我对代码也没有完全理解透彻,或许该参数有别的用法而我没有注意到。
你好,我后来又仔细看了工程代码,发现我遗漏了很多重点;现在看来,在计算loss时只用到pred_len部分的数据,详见_process_one_batch函数中对batch_y的处理;所以与我上面说的数据拼接其实没关系,inverse的取值确实只和任务目标有关,想要得到更贴近原始标签的训练结果,还是需要把inverse设为True。我在个人的数据训练时也将inverse设为True,且通过调参也能获得较好的效果,建议多从数据预处理和参数选择入手试试
> > 你好,我后来又仔细看了工程代码,发现我遗漏了很多重点;现在看来,在计算损失时只用到pred_len部分的数据,详见_process_one_batch函数中对batch_y的处理;所以与我上面说的数据拼接其实没关系,inverse的取值确实只和任务目标有关,想要得到更贴近原始标签的训练结果,还是需要把inverse设为True。我在个人的数据训练时也将inverse设为True,且通过调参也能获得较好的效果,建议多从数据预处理和参数选择入手试试 > > 你好,麻烦问一下你都对哪些参数进行了调整吗?那几个参数对预测结果的影响比较大?谢谢了 三个与输入有关的长度:seq_len/label_len/pred_len,根据你的数据集情况也可以试试调整时序编码的模块,其他的就是batch、学习率这些比较常规的。不过我是手动调参的,比较原始,不是很严谨,也没摸出规律。