pytorch DataLoader:`张量必须具有相同数量的尺寸`

时间:2020-02-26 13:08:51

标签: python python-3.x numpy machine-learning pytorch

我正在尝试在Pytorch中安装LSTM模型。我的数据太大,无法读取到内存中,因此我想使用Pytorch的{​​{1}}函数创建小批量数据。

我有两个功能作为输入(DataLoaderX1)。我有一个输出功能(y)。我将X2X1的365个时间步用作预测X2的功能。

我的训练数组的维度是:

y == (n_observations, n_timesteps, n_features)

我不明白为什么下面的代码不起作用,因为我看到了其他示例,其中X,y对具有不同的维数(LSTM for runoff modellingPytorch's own docs

最小可复制示例

(9498, 365, 2)

输出:

import numpy as np
import torch
from torch.utils.data import DataLoader

train_x = torch.Tensor(np.random.random((9498, 365, 2)))
train_y = torch.Tensor(np.random.random((9498, 1)))
val_x = torch.Tensor(np.random.random((1097, 365, 2)))
val_y = torch.Tensor(np.random.random((1097, 1)))
test_x = torch.Tensor(np.random.random((639, 365, 2)))
test_y = torch.Tensor(np.random.random((639, 1)))

train_dataset = (train_x, train_y)
test_dataset = (test_x, test_y)
val_dataset = (val_x, val_y)

train_dataloader = DataLoader(train_dataset, batch_size=256)

iterator = train_dataloader.__iter__()
iterator.next()

1 个答案:

答案 0 :(得分:1)

torch.utils.data.DataLoader必须获得一个torch.utils.data.Dataset作为参数。您正在提供张量元组。我建议您按以下方式使用torch.utils.data.TensorDataset

from torch.utils.data import DataLoader, TensorDataset

train_x = torch.rand(9498, 365, 2)     
train_y = torch.rand(9498, 1)

train_dataset = TensorDataset(train_x, train_y)
train_dataloader = DataLoader(train_dataset, batch_size=256)

for x, y in train_dataloader:
    print (x.shape)

检查是否可以解决您的问题。