Github论文源码
由于很菜,零基础看源码的时候喜欢按照代码运行的顺序来跑一遍一个batch,从外层一点点拆进去,看代码内部的逻辑。最初复现的时候大部分都沿用args里的default,后面再尝试改用自己的数据+调参(哈哈至今也无法参透调参的这部分,希望不是玄学。。。)
记录一下本菜菜的复现过程。
1 代码运行顺序
-
main_informer.py 最外层,参数设置、让代码跑起来
args.itr 迭代调用exp/exp_informer.py 中的 Exp_Informer类并传入args构建Exp_Informer类实例,继承了同文件夹中的exp_basic.py/Exp_Basic类- 执行 Exp_Informer._build_model(args) 函数, 构建Informer模型实例
- 调用 Exp_Informer.train(setting)
- 调用Exp_Informer._get_data(flag=‘train’)
- 调用data/data_loader.py 中的 Dataset_ETT_hour 类,并传入args构建实例
- Dataset实例转换为DataLoader实例
-
args.train_epochs 迭代,每个epoch 都取出dataloader中的所有batch数据
- batch迭代,batch_x, batch_y,batch_x_mark,batch_y_mark 的形状(shape)分别是 [32, 96, 7],[32, 24, 7],[32, 96, 4],[32, 72, 4]
- 调用 Exp_Informer._process_one_batch() 在这个函数中将每个batch的数据传递进入前面构建的Informer模型。也会在这个函数进行一些padding等,返回的输model出值。
- 计算损失,梯度下降迭代 loss.backward()
- 对所有batch训练结束后调用 Exp_Informer.vali() 查看当前epoch的验证集表现结果。并挑选最好的checkpoint存下来。
- batch迭代,batch_x, batch_y,batch_x_mark,batch_y_mark 的形状(shape)分别是 [32, 96, 7],[32, 24, 7],[32, 96, 4],[32, 72, 4]
- 调用Exp_Informer._get_data(flag=‘train’)
- 调用Exp_Informer.test(setting)
(略)类似train的过程 - torch.cuda.empty_cache()
2 复现
2.1 复现结果
wandb
上图为测试集的表现
上图是training过程中训练集的output和真值的对比,注意并不是测试集!
2.2 复现代码
感觉现在结果有点拉,还没有调参全部用的默认参数(真的不想调参。。。)。欢迎评论区大佬们给点指导意见,,怎么才能调的更好点。
kaggle notebook
这里打开应该是这个样子的
文章来源:https://www.toymoban.com/news/detail-830608.html
3 未完待续 2023/11/22
真的菜菜菜菜菜中菜,欢迎评论区大佬指正!文章来源地址https://www.toymoban.com/news/detail-830608.html
到了这里,关于AAAI最佳论文Informer 复现(含python notebook代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!