Регрессия с LTSM - python и Керасом - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь использовать сеть LTSM в Керасе, чтобы сделать прогноз данных временных рядов одним шагом в будущее. У меня есть 5 измерений, и я пытаюсь использовать предыдущие 3 периода чтения, чтобы предсказать будущее значение в следующем периоде. Я нормализовал данные и удалил все NaN et c, и этот код я пытаюсь использовать для обучения сети:

'' '

def Network_ii(IN, OUT, TIME_PERIOD, EPOCHS, BATCH_SIZE, LTSM_SHAPE):

length = len(OUT)
train_x = IN[:int(0.9 * length)]
validation_x = IN[int(0.9 * length):]
train_y = OUT[:int(0.9 * length)]
validation_y = OUT[int(0.9 * length):]

# Define Network & callback:
train_x = train_x.reshape(train_x.shape[0],3, 5)
validation_x = validation_x.reshape(validation_x.shape[0],3, 5)


model = Sequential()
model.add(LSTM(units=128, return_sequences= True, input_shape=(train_x.shape[1],3)))
model.add(LSTM(units=128))
model.add(Dense(units=1))
model.compile(optimizer='adam', loss='mean_squared_error')

train_y = np.asarray(train_y)
validation_y = np.asarray(validation_y)
history = model.fit(train_x, train_y, batch_size=BATCH_SIZE, epochs=EPOCHS, validation_data=(validation_x, validation_y))

# Score model
score = model.evaluate(validation_x, validation_y, verbose=0)
print('Test loss:', score)
# Save model
model.save(f"models/new_model")

' ''

Я пытаюсь приблизительно выполнить описанные здесь шаги - https://machinelearningmastery.com/multivariate-time-series-forecasting-lstms-keras/

Однако, независимо от того, какие корректировки я внес в отношении изменения количества используемых размеров для обучения сети или продолжительности периода времени я не могу получить выходные данные модели, чтобы дать прогнозы, которые не являются ни 1, ни 0. Это даже несмотря на то, что целевые данные в массиве «OUT» состоят из непрерывных данных на [0,1].

Я думаю, что может быть что-то не так с тем, как я настраиваю функцию .Sequential (), но я не вижу, что настраивать. Я относительно новичок в этом, поэтому любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 30 января 2020

Возможно, вы используете функцию прогнозирования, которая не является стандартной. Может быть, вы используете predict_classes?

Тот, который хорошо документирован и стандарт - model.predict.

...