Pytorch LSTM предсказывает слишком низкие значения

#python #pandas #neural-network #pytorch

#python #панды #нейронная сеть #pytorch

Вопрос:

Я следовал руководству по https://stackabuse.com/time-series-prediction-using-lstm-with-pytorch-in-python / для того, чтобы настроить модель LSTM для прогнозирования с использованием torch. После импорта необходимых модулей (torch, torch.nn, functional, optim и т. Д. 🙂 Я настроил свой список индексов с количествами на 52 недели.

 idxlist = []

for x in range (0, len(inputslist)):
    idxlist.append(a - datetime.timedelta(weeks = x))

in_data = pd.DataFrame(columns=['date','qty'])
in_data.date = idxlist
in_data.qty = inputslist
all_data = in_data['qty'].values.astype(float)
 

Затем я определил размер теста и настроил масштабатор для нормализации данных:

 from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler(feature_range=(-1,1))
train_data_normalized = scaler.fit_transform(train_data.reshape(-1,1))
train_data_normalized = torch.FloatTensor(train_data_normalized).view(-1)
#train window
train_window = 12
 

Затем я создал последовательности:

 def create_inout_sequences(input_data,tw):
    inout_seq = []
    L = len(input_data) ##40
    for i in range(L-tw): ##32 (se tw=8)
        train_seq = input_data[i:i tw]
        train_label = input_data[i tw:i tw 1]
        inout_seq.append((train_seq ,train_label))
    return inout_seq

train_inout_seq = create_inout_sequences(train_data_normalized, train_window)
print(len(train_inout_seq)) #len(train) - train_w
 

И настройте класс Net для модели LSTM. После оптимизации с помощью model=LSTM(), optim .Адам и model.eval(), я получаю обратное преобразование с помощью:

 actual_predictions = scaler.inverse_transform(np.array(test_inputs[train_window:] ).reshape(-1, 1))
 

Однако построение прогнозируемых значений за последние 12 недель с фактическими значениями, которые я получаю:
График.

Почему это предсказание намного ниже фактических значений, даже если оно периодическое?

Комментарии:

1. Сходилось ли обучение? Какова окончательная потеря?

2. Я так думаю .. в итоге потеря составила 0,00149374, рассчитанная с помощью функции MSELoss .

3. Я изменил размер скрытого слоя со 100 на 200, и теперь прогноз выше, чем ожидалось.. Какие-либо причины для этого?

4. Попробуйте обучить его дольше, например, 300 эпох. Может быть разница.