Я пытаюсь построить модель LSTM для данных временных рядов.Детали набора данных:
Входные данные - это временные ряды с 800 субъектами, каждый из которых имеет данные двумерного массива из 60 строк и 200 столбцов.Я загрузил все данные как Тензор формы [800,60,200]
и метки для задачи классификации имеют форму [800,1]
.Я сделал словарь данных, используя следующий код:
class DataCurate(Dataset):
def __init__(self, l1,l2, transform=None):
self.l1=l1
self.l2=l2
self.transform=transform
def __len__(self):
return len(self.l1)
def __getitem__(self, index):
array=self.l1[index]
label=self.l2[index]
sample = {'time_data': array, 'labels': label}
return sample
данные и метки находятся в переменных x & y.Я называю data = Datacurate (x, y)
Позже я строю модель LSTM для задачи классификации, используя код:
class RNNModel(nn.Module):
def __init__(self, input_size, hidden_size, num_layers, num_classes):
super(RNNModel, self).__init__()
self.hidden_size = hidden_size
self.num_layers = num_layers
self.lstm = nn.LSTM(input_size, hidden_size, num_layers,batch_first=True)
self.linear = nn.Linear(hidden_size, num_layers, bias=True)
self.softmax = nn.LogSoftmax()
def forward(self, x)
self.lstm.flatten_parameters()
out_packed, state = self.lstm(x) # RNN
print("lstm output size: {out.size()}"+str(out_packed.size()))
out = self.linear(out_packed[-1]) # linear transform
print("linear output size {out.size()} "+str(out.size()))
log_probs = F.log_softmax(out,dim=1)
print("softmax output size {log_probs.size()}"+str(log_probs.size()))
return log_probs
Это выдает ошибку при запуске сценария обучения:
UserWarning: RNN module weights are not part of single contiguous chunk of memory. This means they need to be compacted at every call, possibly greatly increasing memory usage. To compact weights again call flatten_parameters().
out_packed, state = self.lstm(x) # RNN
Traceback (most recent call last):
File "main_2.py", line 100, in <module>
output = model(train_inputs.transpose(0,1))
File "/usr/local/lib/python3.5/dist-packages/torch/nn/modules/module.py", line 477, in __call__
result = self.forward(*input, **kwargs)
File "/media/iab/disk_a/meghal/test/quickdraw_tutorial_dataset_v1/pytorch_RNN_examples/model.py", line 26, in forward
out_packed, state = self.lstm(x) # RNN
File "/usr/local/lib/python3.5/dist-packages/torch/nn/modules/module.py", line 477, in __call__
result = self.forward(*input, **kwargs)
File "/usr/local/lib/python3.5/dist-packages/torch/nn/modules/rnn.py", line 192, in forward
output, hidden = func(input, self.all_weights, hx, batch_sizes)
File "/usr/local/lib/python3.5/dist-packages/torch/nn/_functions/rnn.py", line 324, in forward
return func(input, *fargs, **fkwargs)
File "/usr/local/lib/python3.5/dist-packages/torch/nn/_functions/rnn.py", line 288, in forward
dropout_ts)
RuntimeError: param_from.type() == param_to.type() ASSERT FAILED at /pytorch/aten/src/ATen/native/cudnn/RNN.cpp:491, please report a bug to PyTorch. parameter types mismatch
Я не знаю, что это значит и как мне это решить.Я совершенно новичок в LSTM.