У меня есть серия синусоидальных волн, которые я загрузил с помощью специального загрузчика данных. Данные преобразуются в тензор факела с помощью 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'))