Keras LSTM Продолжить тренировку после сохранения - PullRequest
0 голосов
/ 09 мая 2018

Я работаю над моделью LSTM, и я хотел бы сохранить ее и продолжить с дополнительными данными по мере их накопления. Моя проблема в том, что после сохранения модели и ее загрузки в следующий раз, когда я запускаю скрипт, прогноз полностью неверен, он просто имитирует введенные в него данные.

Вот инициализация модели:

# create and fit the LSTM network
if retrain == 1:
    print "Creating a newly retrained network."
    model = Sequential()
    model.add(LSTM(inputDimension, input_shape=(1, inputDimension)))
    model.add(Dense(inputDimension, activation='relu'))
    model.compile(loss='mean_squared_error', optimizer='adam')
    model.fit(trainX, trainY, epochs=epochs, batch_size=batch_size, verbose=2)
    model.save("model.{}.h5".format(interval))
else:
    print "Using an existing network."
    model = load_model("model.{}.h5".format(interval))
    model.compile(loss='mean_squared_error', optimizer='adam')
    model.fit(trainX, trainY, epochs=epochs, batch_size=batch_size, verbose=2)
    model.save("model.{}.h5".format(interval))
    del model
    model = load_model("model.{}.h5".format(interval))
    model.compile(loss='mean_squared_error', optimizer='adam')

Первый набор данных, когда для переобучения задано значение 1, содержит около 10 000 записей с периодом около 3 тыс. И размером партии 5%. Второй набор данных представляет собой однократную запись данных. как в одном ряду, снова 3k эпох и batch_size = 1

решаемые

Я неправильно перезагружал скейлер:

scaler = joblib.load('scaler.{}.data'.format(interval))
dataset = scaler.fit_transform(dataset)

Правильно:

scaler = joblib.load('scaler.{}.data'.format(interval))
dataset = scaler.transform(dataset)

fit_transform пересчитывает множители для масштабированных значений, это означает, что будет смещение от исходных данных.

1 Ответ

0 голосов
/ 09 мая 2018

Из функционала keras модель api для model.fit ():

initial_epoch: целое число. Эпоха, с которой начинается тренировка (полезно для возобновления предыдущего тренировочного заезда).

Установка этого параметра может решить вашу проблему.

Я думаю, что источником проблемы является адаптивная скорость обучения от Адама. Во время обучения скорость обучения снижается для более точной настройки модели. Когда вы переучиваете свою модель только с одной выборкой, обновления веса слишком велики (из-за сброшенной скорости обучения), что может полностью разрушить ваши предыдущие веса.

Если начальная_эпоха не очень хорошая, попытайтесь начать второе обучение с более низкой скоростью обучения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...