На этом шаге мы рассмотрим особенности создания такой модели.
Из-за небольшого количества образцов мы возьмем очень маленькую сеть с двумя 64-мерными промежуточными слоями. Вообще, чем меньше обучающих данных, тем скорее наступит переобучение, а использование маленькой модели - один из способов борьбы с ним.
# Поскольку нам потребуется несколько экземпляров одной # и той же модели, мы определили функцию для ее создания def build_model(): model = keras.Sequential([ layers.Dense(64, activation="relu"), layers.Dense(64, activation="relu"), layers.Dense(1) ]) model.compile(optimizer="rmsprop", loss="mse", metrics=["mae"]) return model
Модель заканчивается одномерным слоем, не имеющим функции активации (это линейный слой). Это типичная конфигурация для скалярной регрессии (целью которой является предсказание одного значения на непрерывной числовой прямой).
Применение функции активации могло бы ограничить диапазон выходных значений; например, если в последнем слое применить функцию активации sigmoid, модель обучилась бы предсказывать только значения из диапазона между 0 и 1. В данном случае, с линейным последним слоем, модель способна предсказывать значения из любого диапазона.
Обратите внимание, что модель компилируется с функцией потерь mse - mean squared error (среднеквадратичная ошибка), вычисляющей квадрат разности между предсказанными и целевыми значениями. Эта функция широко используется в задачах регрессии.
Мы также включили новый параметр в мониторинг на этапе обучения: mae - mean absolute error (средняя абсолютная ошибка). Это абсолютное значение разности между предсказанными и целевыми значениями. Например, значение MAE, равное 0,5, в нашей задаче означает, что в среднем прогнозы отклоняются на 500 долларов США.
На следующем шаге мы рассмотрим оценку решения методом перекрестной проверки по K блокам.