如何将 pytorch DataLoader 与 3-D 矩阵一起用于 LSTM 输入?
How to use pytorch DataLoader with a 3-D matrix for LSTM input?
我有一个 3-D(time_stepinputsizetotal_num) 矩阵的数据集,它是一个 .mat 文件。我想使用 DataLoader 获取 LSTM 的输入数据集,其中 batch_size 为 5。我的代码如下:
file_path = "…/database/frameLength100/notOverlap/a.mat"
mat_data = s.loadmat(file_path)
tensor_data = torch.from_numpy(mat_data[‘a’]) #Tensor
class CustomDataset(Dataset):
def __init__(self, tensor_data):
self.tensor_data = tensor_data
def __getitem__(self, index):
data = self.tensor_data[index]
label = 1;
return data, label
def __len__(self):
return len(self.tensor_data)
custom_dataset = CustomDataset(tensor_data=tensor_data)
train_loader = DataLoader(dataset=custom_dataset, batch_size=5, shuffle=True)
我认为代码有误,但不知道如何更正。让我感到困惑的是如何让 DataLoader 知道哪个维度是“total_num”,以便我得到批量大小为 5 的数据集。
如果我理解正确,您希望批处理沿 total_num 维度发生,即。 e.维度 2.
您可以简单地使用该维度来索引您的数据集,即将 __getitem__
更改为 data = self.tensor_data[:, :, index]
,相应地在 __len__
、return self.tensor_data.size(2)
中而不是 len(self.tensor_data)
。然后每个批次的大小为 [time_step, inputsize, 5]
.
我有一个 3-D(time_stepinputsizetotal_num) 矩阵的数据集,它是一个 .mat 文件。我想使用 DataLoader 获取 LSTM 的输入数据集,其中 batch_size 为 5。我的代码如下:
file_path = "…/database/frameLength100/notOverlap/a.mat"
mat_data = s.loadmat(file_path)
tensor_data = torch.from_numpy(mat_data[‘a’]) #Tensor
class CustomDataset(Dataset):
def __init__(self, tensor_data):
self.tensor_data = tensor_data
def __getitem__(self, index):
data = self.tensor_data[index]
label = 1;
return data, label
def __len__(self):
return len(self.tensor_data)
custom_dataset = CustomDataset(tensor_data=tensor_data)
train_loader = DataLoader(dataset=custom_dataset, batch_size=5, shuffle=True)
我认为代码有误,但不知道如何更正。让我感到困惑的是如何让 DataLoader 知道哪个维度是“total_num”,以便我得到批量大小为 5 的数据集。
如果我理解正确,您希望批处理沿 total_num 维度发生,即。 e.维度 2.
您可以简单地使用该维度来索引您的数据集,即将 __getitem__
更改为 data = self.tensor_data[:, :, index]
,相应地在 __len__
、return self.tensor_data.size(2)
中而不是 len(self.tensor_data)
。然后每个批次的大小为 [time_step, inputsize, 5]
.