Я пытаюсь соответствовать модели LSTM в Pytorch. Мои данные слишком велики, чтобы их можно было прочитать в память, поэтому я хочу создать мини-пакеты данных, используя функцию DataLoader
из Pytorch.
У меня есть две функции для ввода (X1
, X2
). У меня есть одна функция вывода (у). Я использую 365 временных шагов X1
& X2
в качестве функций, используемых для прогнозирования y
.
Размеры моего тренировочного массива:
(n_observations, n_timesteps, n_features)
== (9498, 365, 2)
Я не понимаю, почему код ниже не работает, потому что у меня есть видел другие примеры, где пары X, y имеют различное количество измерений ( LSTM для моделирования стока , собственные документы Pytorch )
Минимальный воспроизводимый пример
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()
Выход:
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
<ipython-input-47-2a0b28b53c8f> in <module>
13
14 iterator = train_dataloader.__iter__()
---> 15 iterator.next()
/opt/conda/lib/python3.7/site-packages/torch/utils/data/dataloader.py in __next__(self)
344 def __next__(self):
345 index = self._next_index() # may raise StopIteration
--> 346 data = self._dataset_fetcher.fetch(index) # may raise StopIteration
347 if self._pin_memory:
348 data = _utils.pin_memory.pin_memory(data)
/opt/conda/lib/python3.7/site-packages/torch/utils/data/_utils/fetch.py in fetch(self, possibly_batched_index)
45 else:
46 data = self.dataset[possibly_batched_index]
---> 47 return self.collate_fn(data)
/opt/conda/lib/python3.7/site-packages/torch/utils/data/_utils/collate.py in default_collate(batch)
53 storage = elem.storage()._new_shared(numel)
54 out = elem.new(storage)
---> 55 return torch.stack(batch, 0, out=out)
56 elif elem_type.__module__ == 'numpy' and elem_type.__name__ != 'str_' \
57 and elem_type.__name__ != 'string_':
RuntimeError: invalid argument 0: Tensors must have same number of dimensions: got 4 and 3 at /tmp/pip-req-build-4baxydiv/aten/src/TH/generic/THTensor.cpp:680