[Stove AI] Deep Learning 002 — Создание и обучение модели однослойной нейронной сети
(Библиотеки Python и номера версий, используемые в этой статье: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2)
Ранее мы представили базовую структурную единицу нейронной сети — персептрон, а теперь давайте рассмотрим базовую структуру и методы обучения нейронной сети.
Однослойная нейронная сеть
Однослойная нейронная сеть состоит из нескольких нейронов в одном слое, Вообще говоря, структура однослойной нейронной сети: входной слой, скрытый слой и выходной слой. Ниже приведена схема структуры.
Прямая сеть изображена на рисунке, но структура ее сети обратного распространения такая же. Синее поле представляет входной слой, зеленый круг представляет скрытый слой, а выходной слой не отображается. Изображение из20 июля 2017 г. Академическая лекция профессора Чжу Синцюаня Точки зрения и итоговая лекция 2: Один нейрон / однослойная нейронная сеть.
Базовую структуру однослойной нейронной сети также можно увидеть на следующем рисунке:
Так как же создать однослойную нейронную сеть из кода и обучить ее?
1.1 Загрузите набор данных
Во-первых, мы загружаем набор данных. Набор данных очень простой. Он содержит 16 строк и четыре столбца. Первые два столбца — это двойные данные, которые составляют столбец признаков, а последние два столбца — целые числа (0 или 1), которые составляют столбец метки. Метод загрузки очень прост, я уже упоминал его много раз, здесь рисуется только распределение столбцов признаков в наборе данных. следующее
1.2 Создайте модель и обучите ее
После подготовки набора данных необходимо построить модель однослойной нейронной сети и обучить ее.
# 构建单层NN模型,该模型的隐含层含有两个感知器
import neurolab as nl
x_min, x_max = dataset_X[:,0].min(), dataset_X[:,0].max()
y_min, y_max = dataset_X[:,1].min(), dataset_X[:,1].max()
single_layer_net = nl.net.newp([[x_min, x_max], [y_min, y_max]], 2) # 隐含层含有两个神经元
# 所以本单层NN模型含有两个输入神经元,两个隐含层神经元,两个输出神经元
cost = single_layer_net.train(dataset_X, dataset_y, epochs=50, show=2, lr=0.01)
# 训练该单层NN模型,50个回合,每2个回合显示一下训练结果,学习速率为0.01
------------------------------------- потерять-- ------------------------------
Epoch: 2; Error: 7.5; Epoch: 4; Error: 7.0; Epoch: 6; Error: 4.0; Epoch: 8; Error: 4.0; Epoch: 10; Error: 4.0; Epoch: 12; Error: 4.0; Epoch: 14; Error: 4.0; Epoch: 16; Error: 4.0; Epoch: 18; Error: 4.0; Epoch: 20; Error: 4.0; Epoch: 22; Error: 4.0; Epoch: 24; Error: 4.0; Epoch: 26; Error: 4.0; Epoch: 28; Error: 4.0; Epoch: 30; Error: 4.0; Epoch: 32; Error: 4.0; Epoch: 34; Error: 4.0; Epoch: 36; Error: 4.0; Epoch: 38; Error: 4.0; Epoch: 40; Error: 4.0; Epoch: 42; Error: 4.0; Epoch: 44; Error: 4.0; Epoch: 46; Error: 4.0; Epoch: 48; Error: 4.0; Epoch: 50; Error: 4.0; The maximum number of train epochs is reached
--------------------------------------------Заканчивать----- --------------------------------
Видно, что в 6-м раунде стоимость достигает наименьшего уровня и не меняется, что говорит о том, что она сошлась, и увеличивать количество обучающих раундов бесполезно. Постройте график изменения ошибок, чтобы получить:
1.3 Используйте обученную модель для прогнозирования новых выборок
Обученная модель определенно будет использовать его для прогнозирования новых выборок, ожидая, что она также получит хорошие результаты на новых выборках, которые она никогда раньше не видела.
Прогнозируемый код:
# 用训练好的模型来预测新样本
new_samples=np.array([[0.3, 4.5],
[4.5, 0.5],
[4.3, 8]])
print(single_layer_net.sim(new_samples))
------------------------------------- потерять-- ------------------------------
[[0. 0.] [1. 0.] [1. 1.]]
--------------------------------------------Заканчивать----- --------------------------------
Только по результатам мы успешно построили однослойную модель NN и обучили ее, а также успешно предсказали новые выборки с помощью обученной модели.Как правило, процесс модели глубокого обучения выглядит так.
Хотя однослойная нейросетевая модель проста по структуре и быстро обучаема, для некоторых простых задач она больше подходит, для более сложных задач эта модель не сможет делать то, что хочет, и иногда наш метод оптимизации может не работать. быть в состоянии найти желаемые параметры оптимизации Невозможно найти требуемую функцию подгонки Поскольку модель относительно проста, сложно изучить сложный внутренний механизм, и легко произвести подгонку.
########################резюме########################## ######
1. Структура однослойной модели нейронной сети проста, время обучения короткое, а проблемы, которые можно решить, относительно просты.Для более сложных задач будет недостаточно подгонки, поэтому применение ограничено. В настоящее время модель однослойной нейронной сети напрямую используется очень редко.
#################################################################
Примечание. Эта часть кода была загружена в (мой гитхаб), добро пожаловать на скачивание.
Использованная литература:
1. Классические примеры машинного обучения Python, Пратик Джоши, перевод Тао Цзюньцзе и Чена Сяоли.