У меня есть серия синусоидальных волн, которые я загрузил с помощью специального загрузчика данных. Данные преобразуются в тензор факела с помощью from_numpy. Затем я пытаюсь загрузить данные с помощью перечислителя поверх train_loader. Итератор показан ниже.
for epoch in range(epochs):
for i, data in enumerate(train_loader):
input = np.array(data)
train(epoch)
Я получаю ошибку:
RuntimeError: input must have 3 dimensions, got 2
Я знаю, что мне нужно иметь свои входные данные в [sequence length, batch_size, input_size]
для LSTM, но я не знаю, как отформатировать данные моего массива из 1000 синусоидальных волн длиной 10000.
Ниже мой метод обучения.
def train(epoch):
model.train()
train_loss = 0
def closure():
optimizer.zero_grad()
print(input.shape)
output = model(Variable(input))
loss = loss_function(output)
print('epoch: ', epoch.item(),'loss:', loss.item())
loss.backward()
return loss
optimizer.step(closure)
Я думал, что попробую добавить (seq_length, batch_size, input_size) в кортеж, но это не может быть передано в сеть. В дополнение к этому я предположил, что загрузчик данных вводил размер системы в систему. Любая помощь будет оценена.
редактировать
Вот мои примерные данные:
T = 20
L = 1000
N = 100
x = np.empty((N, L), 'int64')
x[:] = np.array(range(L)) + np.random.randint(-4 * T, 4 * T, N).reshape(N, 1)
data = np.sin(x / 1.0 / T).astype('float64')
torch.save(data, open('traindata.pt', 'wb'))