【发布时间】:2019-01-27 01:43:40
【问题描述】:
我正在尝试在时间序列数据上训练 RNN,虽然有很多关于如何构建 RNN 模型的教程,但我在为此任务构建数据加载器对象时遇到了一些麻烦。数据都将是相同的长度,因此也不需要填充。到目前为止我采取的方法是在数据集类的 getitem 函数中返回一系列数据,并将长度定义为
len(data) - seq_len + 1
,但是我觉得这有点“hacky”,应该有更合适的方法来做到这一点。这种方法似乎令人困惑,我觉得如果与小组合作会导致问题。更具体地说,我认为以某种方式覆盖 Pytorch Dataset 构造函数中的采样器函数是正确的方法,但我无法理解如何实现它。下面是我构建的当前数据集类,谁能指出我正确的方向以及如何修复它?提前谢谢你。
class CustomDataset(Dataset):
def __init__(self, df, cats, y, seq_l):
self.n, self.seq_l = len(df), seq_l
self.cats = np.array(np.stack([c.values for n,c in df[cats].items()], 1).astype(np.int64))
self.conts = np.array(np.stack([c.values for n,c in df[[i for i in df.columns if i not in cats]].items()], 1).astype(np.float32))
self.y = np.array(y)
def __len__(self): return len(self.y) - self.seq_l + 1
def __getitem__(self, idx):
return [
(torch.from_numpy(self.cats[idx:idx+self.seq_l]),
torch.from_numpy(self.conts[idx:idx+self.seq_l])),
self.y[idx+self.seq_l-1]
]
【问题讨论】:
标签: python deep-learning dataset pytorch rnn