Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add preprocess for BigST #198

Closed
wants to merge 49 commits into from

Conversation

superarthurlx
Copy link
Contributor

对应BigST里面的--use_long参数,感觉单独作为一个模型的复现比较合理,之后BigST需要读取BigSTPreprocess保存的下来的参数(之后有时间再处理一下BigST的代码),源代码使用的是最后一个epoch的,按照BasicST的框架应该可以选择best_val的或者last epoch的,不知道对于BigST的效果有何影响。另外preprocess这部分代码跑起来确实非常慢。

@ChengqingYu
Copy link

对应BigST里面的--use_long参数,感觉单独作为一个模型的复现比较合理,之后BigST需要读取BigSTPreprocess保存的下来的参数(之后有时间再处理一下BigST的代码),源代码使用的是最后一个epoch的,按照BasicST的框架应该可以选择best_val的或者last epoch的,不知道对于BigST的效果有何影响。另外preprocess这部分代码跑起来确实非常慢。

你好,我在PEMS04上测试这个模型,如果batch size设置为64,就会产生以下错误,设置为1就是正常的,请问这有问题吗?

x_ = x[:, :, idx_perm[j*self.tiny_batch_size:(j+1)*self.tiny_batch_size], :]
IndexError: index 18800 is out of bounds for dimension 0 with size 307

@superarthurlx
Copy link
Contributor Author

没有问题,BigST的preprocess部分需要保证batch-size是1,具体可以看源代码中BigST中preprocess的部分或者BigSTPreprocess自己的runner:

B, T, N, F = x.shape
batch_num = int(B * N / self.tiny_batch_size) # 似乎要确保不能等于0
idx_perm = np.random.permutation([i for i in range(B*N)])
for j in range(batch_num):
if j==batch_num-1:
x_ = x[:, :, idx_perm[(j+1)*self.tiny_batch_size:], :]
y_ = y[:, :, idx_perm[(j+1)self.tiny_batch_size:], :]
else:
x_ = x[:, :, idx_perm[j
self.tiny_batch_size:(j+1)self.tiny_batch_size], :]
y_ = y[:, :, idx_perm[j
self.tiny_batch_size:(j+1)*self.tiny_batch_size], :]

这里是从全部节点中选择一部分节点,因此idx_perm的数值不能超过节点个数N,因此需要B=1,除此之外batch_num也不能是零不然也会报错,基本上tiny_batch_size不超过N就行,我理解的是这样。

@ChengqingYu
Copy link

还有一个问题,我测试了一下

没有问题,BigST的preprocess部分需要保证batch-size是1,具体可以看源代码中BigST中preprocess的部分或者BigSTPreprocess自己的runner:

B, T, N, F = x.shape batch_num = int(B * N / self.tiny_batch_size) # 似乎要确保不能等于0 idx_perm = np.random.permutation([i for i in range(B*N)]) for j in range(batch_num): if j==batch_num-1: x_ = x[:, :, idx_perm[(j+1)*self.tiny_batch_size:], :] y_ = y[:, :, idx_perm[(j+1)self.tiny_batch_size:], :] else: x = x[:, :, idx_perm[j_self.tiny_batch_size:(j+1)self.tiny_batch_size], :] y = y[:, :, idx_perm[j_self.tiny_batch_size:(j+1)*self.tiny_batch_size], :]

这里是从全部节点中选择一部分节点,因此idx_perm的数值不能超过节点个数N,因此需要B=1,除此之外batch_num也不能是零不然也会报错,基本上tiny_batch_size不超过N就行,我理解的是这样。

你好,我还有一个问题,我在PEMS04上测试模型的性能,同样的设置下,没有加preprocess误差要低一些(性能更好 ),请问你测试过性能

@superarthurlx
Copy link
Contributor Author

是用BigST加上了preprocess学到的feat之后的测试吗?没有调参的情况下我测试过BigST在12-12实验设置下的结果,表现一般,加上preprocess没有测过。

@ChengqingYu
Copy link

是用BigST加上了preprocess学到的feat之后的测试吗?没有调参的情况下我测试过BigST在12-12实验设置下的结果,表现一般,加上preprocess没有测过。

你好,我用BigST和BigSTpreprocess同时在PEMS04数据上测试,保持超参数一致,batch size都是1的情况下,用12预测12
BigST的mae是19多
BigSTpreprocess的mae有22到23

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants