Closed nixcty closed 11 months ago
您好我是做SOH预测的,如果参数设置成96,72,24的话,预测出来的结果绘图只有24个点,可我是想让它从第70%的点开始预测后面的数据,24太少了。
def __getitem__(self, index):
s_begin = index
s_end = s_begin + self.seq_len
r_begin = s_end - self.label_len
r_end = r_begin + self.label_len + self.pred_len
seq_x = self.data_x[s_begin:s_end]
seq_y = self.data_y[r_begin:r_end]
seq_x_mark = self.data_stamp[s_begin:s_end]
seq_y_mark = self.data_stamp[r_begin:r_end]
return seq_x, seq_y, seq_x_mark, seq_y_mark
def __len__(self):
return len(self.data_x) - self.seq_len- self.pred_len + 1
这里是dataset_custom部分代码:可以看出seq_x就是seq_len在你的数据上划出的一段数据,然后去对照生成长为 $label\_len + pred\_len$ 的seq_y。注意,对于同一个index值,seq_y相对于seq_x晚 $seq\_len - label\_len$ 个时刻。所以,batch 内的一个小项需要在你的数据上取值长度为 $seq\_len + 2 \times label\_len + pred\_len$ 滑动窗口的数据。
无论是(seq, label, pred) = (96, 72, 24) 还是 (96, 48, 24) 在 $800 \times 0.2 = 160$ 的测试数据长度上都取不满一次完整测试数据。后续因为其他原因,你的数据还是补全成满足要求的形状,最后输出一次pred_len的数据。
import numpy as np
t = np.random.rand(6)
t[6: 10] # no out_of_range error
您好我是做SOH预测的,如果参数设置成96,72,24的话,预测出来的结果绘图只有24个点,可我是想让它从第70%的点开始预测后面的数据,24太少了。
应该可以预测24个点,然后用这24个点和前面48个点组成新的72个点,再预测接下来的24个点。。。这样子吧
def __getitem__(self, index): s_begin = index s_end = s_begin + self.seq_len r_begin = s_end - self.label_len r_end = r_begin + self.label_len + self.pred_len seq_x = self.data_x[s_begin:s_end] seq_y = self.data_y[r_begin:r_end] seq_x_mark = self.data_stamp[s_begin:s_end] seq_y_mark = self.data_stamp[r_begin:r_end] return seq_x, seq_y, seq_x_mark, seq_y_mark def __len__(self): return len(self.data_x) - self.seq_len- self.pred_len + 1
这里是dataset_custom部分代码:可以看出seq_x就是seq_len在你的数据上划出的一段数据,然后去对照生成长为 label_len+pred_len 的seq_y。注意,对于同一个index值,seq_y相对于seq_x晚 seq_len−label_len 个时刻。所以,batch 内的一个小项需要在你的数据上取值长度为 seq_len+2×label_len+pred_len 滑动窗口的数据。
无论是(seq, label, pred) = (96, 72, 24) 还是 (96, 48, 24) 在 800×0.2=160 的测试数据长度上都取不满一次完整测试数据。后续因为其他原因,你的数据还是补全成满足要求的形状,最后输出一次pred_len的数据。
import numpy as np t = np.random.rand(6) t[6: 10] # no out_of_range error
更正:batch内一个小项长度为 $seq\_len + pred\_len$。
所以,长度为 160 的 test set,能够生成 160 - (96 + 24) + 1 = 41项数据,然后在这基础上组成 batch。假设你使用batch_size=32,那么test set只会有一个batch(因为源码在设置test的 dataloader 的时候设置drop_last=True)。
测试集的预测结果与真实值会保存在./results/[对应实验文件夹]/[true|pred].npy,可以用来查看实验结果。如果你使用batch_size=32,那么这里面的ndarry应该是( batches, pred_len, features) = (num_sample - (num_sample % batch_size) = 1, 24, n_features)。
至于“预测结果 24 个点”,是不是在启动项目的时候加了'--do_predict'参数。这是out-of-sample prediction,batch_size=1,只用数据的末尾生成 pred_len长度的结果。
多谢各位老师解惑!感激不尽!
请问你是做循环寿命预测吗?我也是做寿命预测,但是循环寿命的话感觉实际工况下用处不大。。。如果是800数据点的话,应该要做滑动窗口,取窗口大小seq=96,然后label=72, pred=24,这样子吧。