После того, как мы начали использовать только один линейный нейрон, мы продолжаем и строим нашу первую искусственную нейронную сеть (ИНС). Этот учебник основан на учебнике по регрессии от Tensorflow.
В этом уроке мы используем набор данных, описывающий автомобили. Нам предоставляются такие данные, как количество цилиндров, мощность в лошадиных силах, вес и т. д. Нам нужно предсказать количество миль на галлон (MPG). Поэтому мы используем размеченные обучающие данные и реализуем нашу первую ИНС.
В последнем разделе этого руководства есть несколько идей, которые вы могли бы попытаться оптимизировать в дальнейшем.
Настройка набора данных
Как и в прошлый раз, мы начинаем с настройки набора данных. Набор данных, который мы используем, — это набор данных Auto MPG, доступный в Хранилище машинного обучения UCI.
Мы делаем это, добавляя новый файл Python с именем auto_mpg_dataset.py в нашу папку наборов данных и получая необработанный набор данных.
Это должно вывести что-то вроде этого:
Есть несколько проблем:
- Если вы запустите
print(dataset.isna().sum())
, вы увидите, что есть строки с неизвестными значениями; нам нужно удалить это, используяdataset = dataset.dropna()
- Происхождение действительно категориальное, а не числовое. Это вводит в наш набор данных информацию, которая нам не нужна. Столбец кодируется так: 1-США, 2-Европа, 3-Япония. Более высокие числа интерпретируются лучше, но мы не хотим оценивать какое-либо состояние происхождения, поэтому нам нужно закодировать этот столбец одним нажатием.
dataset['Origin'] = dataset['Origin'].map({1: 'USA', 2: 'Europe', 3: 'Japan'})
dataset = pd.get_dummies(dataset, prefix='', prefix_sep='')
Это оставляет нам следующий вывод:
Нам нужно разделить набор данных на обучающий и тестовый наборы; мы делаем это 80% поездов и 20% тестовых наборов. Функция, которую мы хотим предсказать, — это «MPG», поэтому нам нужно отделить целевое значение, «метку», от функций:
Реализация модели
Мы можем реализовать модель прямо сейчас. Поэтому мы открываем файл regression.py в папке «models».
Структура модели в последнем уроке такая же; мы наследуем только от tf.keras.Model:
Нормализация
Если мы посмотрим на данные в таблице, то увидим, что есть столбцы с разным масштабом. Чтобы обрабатывать каждый столбец одинаково, нам нужно нормализовать столбцы.
Мы можем сделать это двумя способами:
- Используйте NumPy для нормализации набора данных или
- используйте нормализующий слой в нашей ИНС.
В этом уроке мы реализуем последний.
Для этого мы подгоняем нормализующий слой к нашим данным объектов. Мы можем сделать это в нашем методе __init__().
self.normalizer = preprocessing.Normalization()
self.normalizer.adapt(np.array(train_features))
Слои
В функции init() нам также нужно определить плотные слои. В плотном слое или слое с прямой связью каждый нейрон слоя связан с каждым нейроном следующего слоя. Связи между нейронами являются весами.
Функция call() определяет порядок вызова слоев.
Наша первая модель будет использовать два плотных слоя по 64 нейрона в каждом и ReLU в качестве нелинейности. Выходной слой — это всего лишь один нейрон, который использует функцию активации linear и выводит предсказанный MPG. В функцию get_model() мы передаем train_features для инициализации слоя нормализации.
Обучение модели
Нам нужно связать наш подготовленный набор данных с нашей моделью и соответствующим образом обучить его. Поэтому мы пишем новый трейнер с именем trainer_regression.py и помещаем его в папку «trainer».
Как видите, мы в основном делаем те же шаги, что и в предыдущем уроке:
- получить модель
- получить набор данных
- обучить модель
- оценить модель.
Изменения в main.py
В main.py есть несколько изменений. Нам нужно:
- параметры val_split и train_split
- добавить регресс тренера
Вот и все!
Что мы узнали
Мы реализовали нашу первую ИНС самостоятельно! Охвачен весь конвейер от получения набора данных, реализации ИНС и обучения.
Мы можем попытаться оптимизировать нашу модель дальше:
- попробуй поиграться с функциями активации
- изменить скорость обучения и эпохи
- изменить количество слоев и нейронов
- реализовать слои ранней остановки и отсева