Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шолле Ф. - Глубокое обучение на Python (Библиотека программиста) - 2023.pdf
Скачиваний:
4
Добавлен:
07.04.2024
Размер:
11.34 Mб
Скачать

364    Глава 10. Глубокое обучение на временных последовательностях

.Во-вторых,.порядок.в.данных.о.погоде.имеет.большое.значение..Недавнее. прошлое.гораздо.информативнее.для.предсказания.температуры.следу­ющего. . дня,.чем.данные.пятидневной.давности..Одномерная.сеть.неспособна.учесть. этот.факт..В.частности,.слои.MaxPooling1D .и.GlobalAveragePooling1D .уничтожают.информацию.о.порядке.

Рис. 10.4. Изменение средней абсолютной ошибки (MAE)

одномерной сверточной сети на обучающих и проверочных данных

в задаче прогнозирования температуры по данным Jena

10.2.5. Первое базовое рекуррентное решение

Ни.полносвязное,.ни.сверточное.решение.не.дали.хорошего.результата.—.но.это. не.означает,.что.машинное.обучение.неприменимо.к.данной.задаче..В.подходе. на.основе.полносвязной.модели.первым.действием.мы.уменьшили.размерность.временных.последовательностей,.устранив.понятие.времени.из.входных. данных..Подход.на.основе.сверточной.сети.одинаково.обрабатывал.каждый. сегмент.данных.и.применял.операцию.объединения,.которая.тоже.удаляла.информацию.о.порядке.следования..Давайте.посмотрим.на.эти.данные.как.на.то,. чем.они.являются.в.действительности:.последовательностью,.в.которой.важны. причина.и.следствие.

Для.обучения.на.таких.данных.была.создана.специальная.архитектура.нейронных.сетей:.рекуррентные.нейронные.сети..Особенно.большой.популярностью. пользуется.слой.долгой.краткосрочной.памяти.(long.short.term.memory,.LSTM)..

Чуть.ниже.вы.увидите,.как.работают.данные.нейронные.сети,.но.прежде.давайте. опробуем.слой.LSTM.

10.2. Пример прогнозирования температуры     365

Листинг 10.12. Простая модель на основе слоя LSTM

inputs = keras.Input(shape=(sequence_length, raw_data.shape[-1])) x = layers.LSTM(16)(inputs)

outputs = layers.Dense(1)(x)

model = keras.Model(inputs, outputs)

callbacks = [ keras.callbacks.ModelCheckpoint("jena_lstm.keras", save_best_only=True)

]

model.compile(optimizer="rmsprop", loss="mse", metrics=["mae"]) history = model.fit(train_dataset,

epochs=10, validation_data=val_dataset, callbacks=callbacks)

model = keras.models.load_model("jena_lstm.keras") print(f"Тестовая MAE: {model.evaluate(test_dataset)[1]:.2f}")

На.рис..10.5.показаны.полученные.результаты..Они.оказались.намного.лучше!.Мы.достигли.средней.абсолютной.ошибки.на.проверочных.данных.всего. 2,36.градуса,.а.на.контрольных.данных.—.2,55.градуса..Модель.на.основе.LSTM. смогла.превзойти.базовый.уровень.(хоть.и.ненамного),.доказав,.что.машинное. обучение.способно.справиться.с.этой.задачей.

Рис. 10.5. Изменение средней абсолютной ошибки (MAE) модели со слоем LSTM на обучающих и проверочных данных в задаче прогнозирования температуры

по данным Jena (обратите внимание, что на графике отсутствуют метрики для первой эпохи: причина в том, что величина MAE (7,75) после этой эпохи просто сильно искажает масштаб графика)