KimMeen / Time-LLM

[ICLR 2024] Official implementation of " 🦙 Time-LLM: Time Series Forecasting by Reprogramming Large Language Models"
https://arxiv.org/abs/2310.01728
Apache License 2.0
1.02k stars 179 forks source link

测试集和验证集在计算损失前没有缩放回去 #104

Closed BellChai closed 3 weeks ago

BellChai commented 1 month ago

你好,我看到测试集和验证集的损失都是通过tools.py下的vali函数计算得到的,但是这个函数在计算损失前没有利用vali_data.inverse_transform()把数据缩放回去,这样应该会对MAE、MSE的计算有很大影响。

而且scaler它读取数据时有多个特征,但是在预测的数据只有1个特征,直接用inverse_transform的话形状是对不上的,还需要进行一些修改才行。

请问是否存在这个问题呢,以及要怎么解决呢?

kwuking commented 1 month ago

你好不存在这个问题,并不是对特征进行了scale,是数据集本身是多元数据集,有多个预测通道,我们只是做了channel independent处理,这个对于结果并不影响,如果想要inverse回去只需要进行对数据进行reshape即可;此外需要注意的是目前时序社区的benchmark评测统一是在scale之后的结果上进行的。

BellChai commented 4 weeks ago

你好不存在这个问题,并不是对特征进行了scale,是数据集本身是多元数据集,有多个预测通道,我们只是做了channel independent处理,这个对于结果并不影响,如果想要inverse回去只需要进行对数据进行reshape即可;此外需要注意的是目前时序社区的benchmark评测统一是在scale之后的结果上进行的。

明白了,感谢!

stjack01 commented 2 weeks ago

@kwuking 想请教下你说的 ”如果想要inverse回去只需要进行对数据进行reshape即可。。。“这句话的意思是,调用dataloader.py里面的scale执行inverse_transform ? 把outputs 和batch_y 进行reshape以后调用inverse_transform ?可否请你详细解释一下呢?

def vali(args, accelerator, model, vali_data, vali_loader, criterion, mae_metric): ...... outputs = outputs[:, -args.pred_len:, f_dim:] batch_y = batch_y[:, -args.pred_len:, f_dim:].to(accelerator.device)

        pred = outputs.detach()
        true = batch_y.detach()

        loss = criterion(pred, true)
        mae_loss = mae_metric(pred, true)