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

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

Листинг 10.8. Исследование вывода, возвращаемого одним из экземпляров Dataset

>>>for samples, targets in train_dataset:

>>>print("samples shape:", samples.shape)

>>>print("targets shape:", targets.shape)

>>>break

samples shape: (256, 120, 14) targets shape: (256,)

10.2.2. Базовое решение без привлечения машинного обучения

Прежде.чем.начать.использовать.черные.ящики.моделей.глубокого.обучения. для.решения.задачи.прогнозирования.температуры,.опробуем.более.простой. и.очевидный.подход..Он.поможет.провести.базовую.линию,.которую.мы.должны.будем.превзойти,.чтобы.доказать.преимущество.более.сложных.моделей. машинного.обучения..Такие.очевидные.базовые.решения.могут.использоваться,. когда.вы.подступаетесь.к.новой.задаче,.не.имеющей.(пока).известного.решения.. Классическим.примером.могут.служить.несбалансированные.задачи.классификации,.когда.некоторые.классы.могут.быть.намного.более.распространены,.чем. другие..Если.набор.данных.содержит.90.%.экземпляров.класса.А.и.10.%.экземпляров.класса.Б,.тогда.очевидным.решением.задачи.классификации.является. неизменный.выбор.класса.А.для.предсказания.классов.новых.образцов..Такой. классификатор.будет.иметь.общую.точность.90.%,.и,.соответственно,.любое. решение.на.основе.машинного.обучения.должно.превзойти.эти.90.%,.чтобы. доказать.свою.полезность..Но.иногда.подобные.базовые.решения.превзойти.на. удивление.трудно.

В.данном.случае.временные́ .последовательности.можно.с.полной.уверенностью. считать.монотонными.(температура.завтра,.вероятно,.будет.близка.к.сегодняшней),.а.также.подчиняющимися.суточной.периодичности..То.есть.разумным. базовым.решением.предсказания.температуры.через.24.часа.является.текущая. температура..Давайте.оценим.этот.подход,.использовав.метрику.средней.абсолютной.ошибки.(mean.absolute.error,.MAE):

np.mean(np.abs(preds - targets))

Вот.цикл.оценки.

Листинг 10.9. Оценка базового решения MAE

def evaluate_naive_method(dataset): total_abs_err = 0. samples_seen = 0

for samples, targets in dataset:

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

preds = samples[:, -1, 1] * std[1] + mean[1] total_abs_err += np.sum(np.abs(preds - targets)) samples_seen += samples.shape[0]

return total_abs_err / samples_seen

print(f"Validation MAE: {evaluate_naive_method(val_dataset):.2f}") print(f"Test MAE: {evaluate_naive_method(test_dataset):.2f}")

Значения температуры находятся в столбце 1, поэтому samples[:, -1, 1] — это последний замер температуры во входной последовательности. Напомню: выше мы нормализовали наши данные, поэтому, чтобы получить температуру в градусах Цельсия, нужно ее денормализовать, умножив на стандартное отклонение и прибавив среднее значение

Это.базовое.решение.обеспечивает.среднюю.абсолютную.ошибку.(MAE).2,44.гра- дуса.Цельсия.на.проверочных.данных.и.2,62.градуса.Цельсия.—.на.контрольных..

То.есть,.спрогнозировав.температуру,.которая.будет.через.24.часа,.вы.ошибетесь. в.среднем.на.два.с.половиной.градуса..Не.так.плохо,.но.едва.ли.кто-то.захочет. запустить.свою.службу.прогноза.погоды,.основанную.на.подобной.эвристике.. Давайте.попробуем.использовать.наши.знания.в.области.глубокого.обучения,. чтобы.улучшить.результат.

10.2.3. Базовое решение

c привлечением машинного обучения

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

В.следующем.листинге.демонстрируется.полносвязная.модель,.которая.сначала. снижает.размерность.данных,.а.затем.пропускает.их.через.два.слоя.Dense..Обратите. внимание.на.отсутствие.функции.активации.в.последнем.слое.Dense,.что.характерно. для.задач.регрессии..В.роли.оценки.потерь.вместо.средней.абсолютной.ошибки. (MAE).мы.будем.использовать.среднеквадратичную.ошибку.(mean.squared.error,. MSE),.поскольку,.в.отличие.от.MAE,.функция.MSE.гладкая.в.районе.нуля,.что. является.полезным.свойством.для.градиентного.спуска..Но.мы.будем.следить. также.и.за.величиной.MAE,.указав.ее.в.качестве.метрики.в.вызове.compile().

Листинг 10.10. Обучение и оценка полносвязной модели

from tensorflow import keras

from tensorflow.keras import layers

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

x = layers.Dense(16, activation="relu")(x)

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

outputs = layers.Dense(1)(x)

model = keras.Model(inputs, outputs)

callbacks = [ keras.callbacks.ModelCheckpoint("jena_dense.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_dense.keras")

 

Загрузить лучшую

 

 

модель и оценить ее

print(f"Test MAE: {model.evaluate(test_dataset)[1]:.2f}")

 

на контрольных данных

Выведем.кривые.потерь.на.обучающих.и.проверочных.данных.(рис..10.3).

Листинг 10.11. Вывод результатов

import matplotlib.pyplot as plt loss = history.history["mae"]

val_loss = history.history["val_mae"] epochs = range(1, len(loss) + 1) plt.figure()

plt.plot(epochs, loss, "bo", label="MAE на обучающих данных") plt.plot(epochs, val_loss, "b", label="MAE на проверочных данных") plt.title("MAE на обучающих и проверочных данных")

plt.legend()

plt.show()

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

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

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

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

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

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

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

Это.существенное.ограничение.машинного.обучения.в.целом:.если.алгоритм. обучения.не.запрограммирован.на.поиск.конкретной.простой.модели,.обучение. параметров.иногда.может.терпеть.неудачу.в.попытках.найти.простое.решение. простой.задачи..Вот.почему.важно.со.всей.тщательностью.подходить.к.проектированию.признаков.и.выбору.соответствующей.архитектуры:.вы.должны. точно.указать.своей.модели,.что.она.должна.искать.

10.2.4. Попытка использовать одномерную сверточную модель

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

Вы.знаете,.что.существуют.слои.Conv2D .и.SeparableConv2D,.которые.видят. входные.данные.через.маленькие.окна,.перемещающиеся.по.двумерным.сет- кам..Существуют.также.одно-.и.даже.трехмерные.версии.этих.слоев:.Conv1D,. SeparableConv1D .и.Conv3D.1 .Слой.Conv1D .основан.на.одномерном.окне,.скользя­ щем.вдоль.входных.последовательностей,.а.слой.Conv3D.—.на.кубических.окнах,. скользящих.вдоль.входных.объемов.

1. Обратите.внимание,.что.слой.SeparableConv3D.отсутствует.в.библиотеке,.но.не.по. каким-то.теоретическим.соображениям,.а.потому,.что.он.просто.пока.не.реализован.

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

То.есть.можно.строить.одномерные.сверточные.сети,.аналогичные.двумерным. сверточным.сетям..Они.отлично.подходят.для.прогнозирования.на.любых. последовательных.данных,.для.которых.соблюдается.предположение.об.инвариантности.в.отношении.переноса.(когда.при.перемещении.окна.вдоль.последовательности.его.содержимое,.независимо.от.местоположения.окна,.должно. соответствовать.тем.же.свойствам).

Давайте.попробуем.использовать.такую.сверточную.модель.в.нашей.задаче.прогнозирования.температуры..Выберем.начальную.длину.окна.24,.чтобы.модель. могла.видеть.данные.сразу.(в.каждом.цикле).за.24.часа..По.мере.уменьшения. разрешения.последовательностей.(с.использованием.слоев.MaxPooling1D).будем. соответственно.уменьшать.размер.окна:

inputs = keras.Input(shape=(sequence_length, raw_data.shape[-1])) x = layers.Conv1D(8, 24, activation="relu")(inputs)

x = layers.MaxPooling1D(2)(x)

x = layers.Conv1D(8, 12, activation="relu")(x) x = layers.MaxPooling1D(2)(x)

x = layers.Conv1D(8, 6, activation="relu")(x) x = layers.GlobalAveragePooling1D()(x) outputs = layers.Dense(1)(x)

model = keras.Model(inputs, outputs)

callbacks = [ keras.callbacks.ModelCheckpoint("jena_conv.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_conv.keras") print(f"Тестовая MAE: {model.evaluate(test_dataset)[1]:.2f}")

На.рис..10.4.показаны.кривые.изменения.метрик.на.обучающих.и.проверочных. данных.

Как.оказалось,.данная.модель.прогнозирует.температуру.даже.хуже,.чем.полносвязная,.достигнув.средней.абсолютной.ошибки.на.проверочных.данных.всего. 2,9.градуса,.что.далеко.от.уровня.базовой.модели..Почему.так.получилось?.Есть. две.причины.

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