Y-debug-sys / Diffusion-TS

[ICLR 2024] Official Implementation of "Diffusion-TS: Interpretable Diffusion for General Time Series Generation"
MIT License
186 stars 27 forks source link

时间序列预测 #41

Closed mkbk-with-circle closed 4 months ago

mkbk-with-circle commented 4 months ago

亲爱的作者您好!我想问一个比较简单的问题,就是我现在希望用一个(1000,165)的一整条时间序列去训练模型,并且尝试生成一个长度为n的形状为(n,165)的时间序列,请问我是不是需要在yaml文件中的test_dataset指定一个空的csv文件?然后在运行时使用mode为predict对吧?在yaml配置文件中还有什么要改的嘛?谢谢作者!!

Y-debug-sys commented 4 months ago

空的csv文件是指?训练数据是以什么形式导入的?

mkbk-with-circle commented 4 months ago

python main.py --name generate_data --config_file Config/my_config.yaml --gpu 0 --sample 1 --milestone 10 --mode predict --pred_len 1000 就是我现在有一个自己的csv文件,形状为(1000,165),然后我想把它作为输入去训练,上面是我输入的命令,但是好像在ouput里只有my_yaml_ground_truth_24_test.npy、my_yaml_ground_truth_24_train.npy、my_yaml_norm_truth_24_test.npy、my_yaml_ground_norm_24_train.npy这四个文件,我不知道生成的数据在哪里(关于“空的csv文件”,我的意思是我想用模型完全生成一个全新的时间序列,然后似乎该模型是在已有的某部分数据上进行生成?所以我在想如果要生成全新的时间序列是不是要让他的test_dataset为一个空的csv文件)

Y-debug-sys commented 4 months ago

不行,测试集得有历史信息用于预测,原代码按照 rate 划分数据集,现在你需要自己制作测试集:原始数据前n项去除,后接n项全0,得到测试数据。这需要对代码 数据集处理 ‘test’ 部分进行修改,谢谢。

Y-debug-sys commented 4 months ago

python main.py --name generate_data --config_file Config/my_config.yaml --gpu 0 --sample 1 --milestone 10 --mode predict --pred_len 1000

为什么 pred_len 是 1000 ?总长度不过 1000 而已,岂不是没有历史信息。

mkbk-with-circle commented 4 months ago

对,我就是希望训练完之后直接生成一个全新的时间序列

mkbk-with-circle commented 4 months ago

所以您的这个模型,是先用train_dataset进行训练,然后用test_dataset为历史信息再进行预测(最后在test_dataset后接上预测生成的数据直到长度为pre_leng),是这样吗?

Y-debug-sys commented 4 months ago

对,我就是希望训练完之后直接生成一个全新的时间序列

那为什么要选择预测,直接无条件生成不行吗?

mkbk-with-circle commented 4 months ago

是运行这个嘛: python main.py --name {name} --config_file {config.yaml} --gpu 0 --sample 0 --milestone {checkpoint_number} 我运行之后好像没找到生成的数据欸,只有my_yaml_ground_truth_24_train.npy和my_yaml_norm_truth_24_train.npy这两个

mkbk-with-circle commented 4 months ago

这是我运行的命令: python main.py --name gogogo --config_file Config/my_config.yaml --gpu 0 --sample 0 --milestone 10

Y-debug-sys commented 4 months ago

我运行之后好像没找到生成的数据欸,只有my_yaml_ground_truth_24_train.npy和my_yaml_norm_truth_24_train.npy这两个

不是 1000 长度吗?为什么是 24?生成结束会产生 ddpm_fake 开头的文件(生成数据在[0, 1]之间,未作逆归一化,逆归一化见 Readme.md)。

mkbk-with-circle commented 4 months ago

抱歉,我在yaml配置文件中还未修改长度(以及我想再次确认一下,该长度是通过修改train_dataset中的window变量来控制对吧?)我在结束时并没有生成ddpm_fake底层文件,应该是因为我把模型的auto_norm设置为了false,然后取消了预处理中的归一化,这是因为我的原始csv数据其实是另一个模型的预处理后的数据因此我舍弃了Diffusion-TS中的预处理,那我是不是用类似保存ddpm_fake的方法把未进行归一化的samples保存下来就是生成的数据了?

Y-debug-sys commented 4 months ago

那我是不是用类似保存ddpm_fake的方法把未进行归一化的samples保存下来就是生成的数据了?

生成结束后 画图 确认数据分布无误就行,谢谢。

mkbk-with-circle commented 4 months ago

好的太感谢了!然后抱歉最后再问一个问题🥺我现在的ddpm_fake是(2001, 24, 165)这样形状的,我想要生成(n,165)这样的该咋调呢🥺🥺🥺

Y-debug-sys commented 4 months ago

什么意思?直接把 24 改成 n 训练不就行了吗?是要可变长度生成吗?

mkbk-with-circle commented 4 months ago

emmm前面那个2001是生成的形状为(24,165)的时间序列的数量吗?!表情我不是要可变生成,我只是没有彻底搞清楚模型,不知道(2001,24,165)中前两个数字代表的含义x 抱歉!

Y-debug-sys commented 4 months ago

不知道(2001,24,165)中前两个数字代表的含义x 抱歉

这里是指生成了 2001 个大小为 (24, 165) 的序列。

mkbk-with-circle commented 4 months ago

好的,然后前面的问题我再确认一下,就是model.params.seq_length就是我想要生成的时间序列长度,而dataloader.train_dataset.params.window是训练时将初始完整时间序列分割后的时间序列长度对吧?这二者不需要相同对吗?

Y-debug-sys commented 4 months ago

你好,需要相同。

mkbk-with-circle commented 4 months ago

哦好滴!我的问题都解决啦!实在是感谢!!!第一次上手做科研能遇到您很幸运!