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

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

В последнем разделе этого руководства есть несколько идей, которые вы могли бы попытаться оптимизировать в дальнейшем.

Настройка набора данных

Как и в прошлый раз, мы начинаем с настройки набора данных. Набор данных, который мы используем, — это набор данных Auto MPG, доступный в Хранилище машинного обучения UCI.

Мы делаем это, добавляя новый файл Python с именем auto_mpg_dataset.py в нашу папку наборов данных и получая необработанный набор данных.

Это должно вывести что-то вроде этого:

Есть несколько проблем:

  1. Если вы запустите print(dataset.isna().sum()), вы увидите, что есть строки с неизвестными значениями; нам нужно удалить это, используя dataset = dataset.dropna()
  2. Происхождение действительно категориальное, а не числовое. Это вводит в наш набор данных информацию, которая нам не нужна. Столбец кодируется так: 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:

Нормализация

Если мы посмотрим на данные в таблице, то увидим, что есть столбцы с разным масштабом. Чтобы обрабатывать каждый столбец одинаково, нам нужно нормализовать столбцы.

Мы можем сделать это двумя способами:

  1. Используйте NumPy для нормализации набора данных или
  2. используйте нормализующий слой в нашей ИНС.

В этом уроке мы реализуем последний.

Для этого мы подгоняем нормализующий слой к нашим данным объектов. Мы можем сделать это в нашем методе __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».

Как видите, мы в основном делаем те же шаги, что и в предыдущем уроке:

  1. получить модель
  2. получить набор данных
  3. обучить модель
  4. оценить модель.

Изменения в main.py

В main.py есть несколько изменений. Нам нужно:

  1. параметры val_split и train_split
  2. добавить регресс тренера

Вот и все!

Что мы узнали

Мы реализовали нашу первую ИНС самостоятельно! Охвачен весь конвейер от получения набора данных, реализации ИНС и обучения.

Мы можем попытаться оптимизировать нашу модель дальше:

  • попробуй поиграться с функциями активации
  • изменить скорость обучения и эпохи
  • изменить количество слоев и нейронов
  • реализовать слои ранней остановки и отсева