PyTorch LSTM автоматически масштабирует данные - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть LSTM, который выдавал странные результаты, предсказанные значения, казалось, находились в другом скаляре, чем входные данные, предсказанные результаты были в диапазоне (-0,5-0,5), в то время как входные данные были масштабированы с помощью MinMaxScaler вrange (0,1)

Я удалил MinMaxScaler из данных, чтобы убедиться, что LSTM все еще дает прогнозы в диапазоне (-0,5-0,5), даже если фактические значения не были уменьшены

Input sequence: [176153.8125, 170.0, 1511.0, 77.59058380126953, 915.5689086914062]
Label: 10671.240234375
Predicted output: 0.30351510643959045

Код для LSTM:

class LSTM(nn.Module):
def __init__(self, input_size=360, hidden_layer_size=50, output_size=batchSize):
    super().__init__()
    self.hidden_layer_size = hidden_layer_size

    self.lstm = nn.LSTM(input_size, hidden_layer_size)

    self.linear = nn.Linear(hidden_layer_size, output_size)

    self.hidden_cell = (torch.zeros(1, 1, self.hidden_layer_size),
                        torch.zeros(1, 1, self.hidden_layer_size))

def init_hidden(self):
    return (torch.zeros(1, 1, self.hidden_layer_size),
            torch.zeros(1, 1, self.hidden_layer_size))

def forward(self, input_seq):

    lstm_out, self.hidden_cell = self.lstm(input_seq.view(len(input_seq), 1, -1), self.hidden_cell)

    predictions = self.linear(lstm_out.view(len(input_seq), -1))


    return predictions[-1]

Код обучения:

for i in range(epochs):

for seq, labels in train_loader:
    seq = seq.to(device)
    labels = labels.to(device)
    optimizer.zero_grad()
    model.module.hidden_cell = model.module.init_hidden()

    y_pred = model(seq)


    single_loss = loss_function(y_pred, labels)
    single_loss.backward()
    optimizer.step()

Я что-то упустил или моя модель просто дерьмо

...