Исследование и разработка метода машинного обучения основанного на нейронных сетях для анализа данных в интернете вещей
Эталонная модель Всемирного форума по интернету вещей. Анализ центров обработки данных и облачных вычислений. Исследование подходов к разработке распределенных алгоритмов обучения. Методы машинного обучения. Изучение наивного байесовского классификатора.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 07.12.2019 |
Размер файла | 1,6 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
· Адаптивное обучение: способность научиться выполнять задачи на основе данных, данных для обучения или начального опыта.
· Самоорганизация: НС может создать свою собственную организацию или представление информации, которую она получает во время обучения;
· Операция в реальном времени. Вычисления нейронной сетью могут выполняться параллельно, используют эту возможность разрабатываются и изготавливаются специальные аппаратные устройства.
· Отказоустойчивость посредством избыточного кодирования информации. Частичное разрушение сети приводит к соответствующему снижению производительности. Однако некоторые возможности сети могут быть сохранены даже при значительном повреждении.
Ограничения нейронных сетей заключаются в следующем:
· Как и в случае любых моделей, управляемых данными, не могут быть использованы, если мало доступных данных.
· Существует много свободных параметров, таких как количество скрытых узлов, скорость обучения, минимальная ошибка, которые могут сильно повлиять на конечный результат.
· Не подходит для арифметики и точных расчетов.
· Нейронные сети не дают объяснений. Если узлов много, то слишком много весов, которые трудно интерпретировать (в отличие от уклонов в линейных моделях, которые можно рассматривать как корреляции). В некоторых задачах объяснения имеют решающее значение.
В данной работе будет рассмотрен пример нейронной сети прямого распространения, также известные как многослойные персептроны. Они являются наиболее распространённым типом нейронных сетей в практических приложениях. С помощью многослойного персептрона можно находить и классифицировать очень сильно не линейные границы.
7.1 Нейрон
Нейрон - структурная единица нейронной сети, получающая и передающая сигналы. Некоторое количество сигналов поступает на вход сети в виде n-мерного вектора x = (x1, x2,…,xn). Каждому входу соответствует свой вес (коэффициент) - wn вес синапса. Если два соседних нейрона вышлют один и тот же сигнал, то к текущему нейрону они могут прийти, во-первых, разного уровня, просто из-за того какое соединение установлено между ними, во-вторых, нейрон может обращать внимание больше на один сигнал и меньше на соседний, соответственно у него есть какие-то веса. После каждый входной сигнал х1 или х2 умножается на свой вес xiwi. Получившиеся произведения суммируются и результатом является единое число - взвешенная сумма входов [34]. Взвешенная сумма входов преобразуется на выходе из нейрона через функцию активации Ф. Искусственный нейрон можно выразить формулой (1):
F(x)=Ф(x1w1+x2w2+?+xnwn)=Ф() (1)
Модель построения искусственного нейронной сети со стороны инженера представлена на рисунке 12.
Рисунок 12. Компоненты формального нейрона.[34]
Нейроны объединяются в сеть по принципу каждый с каждым, и как из транзисторов можно выстроить какую-либо логическую связку.
7.2 Функция активации
Функция активации нейрона Ф - характеристическая функция, определяет выход модели обучения, учитывая линейную комбинацию входов и весов предыдущего слоя, характеризующаяся точностью, и эффективностью обучения модели [35]. Функция активации оказывает значительное влияние способности нейронной сети на скорость сходимости, или может стать первой причиной препятствия к сходимости сети. Если функция одна для всех нейронов сети, то сеть называют однородной (гомогенной) [38]. При наличии в нейронной сети дополнительных параметров, влияющих на функцию активации и, меняющих значение от нейрона к нейрону, то такая сеть называется неоднородной - гетерогенной.
Чаще используют следующие функции активации:
- линейная, f(x) = x;
- ступенчатая функция Хэвисайда, f(x) = [ x? 0];
- сигмоидная (логистическая), f(x) =;
- гиперболическая, f(x)=tanh(x) = ;
- логарифмическая, f(x)= ln(x+);
- гауссовская, f(x)= exp(-x2/2).
8. Практическая часть применения машинного обучения
8.1 Пример нейронной сети
Рассмотрим на простом примере искусственную нейронную сеть. На выходе сеть будет принимать решение «выполнять», т. е. 1, или «не выполнять», что соответствует на выходе 0.
Для обозначения нейронов и весов будут применятся следующие обозначения, X-вектор (x1, x2, …xn) данных нейронов уровня, x - данные нейрона, у - выходное значение нейронной сети, W - марица весов определённого уровня, w - значение веса нейрона. Верхний индекс L - порядковый номер уровня к которому относится значение нейрона, вес; нумерация с 0. Нижние индексы: i - для x, порядковый номер в слое, для w - номер нейрона предыдущего уровня, т.е. L-1. Нижний индекс j - для w, порядковый номер нейрона текущего уровня.
На входе имеем три параметра, по которым и будут приниматься решения, активный вход если выдаёт 1. Из таблицы 1 по накопленным данным видно какой был результат от возбуждения сигнала с того или иного входа.
Таблица 1. Данные по сработке нейрона.
Входы |
Выход |
|||
param_1 |
param_2 |
param_3 |
y |
|
0 |
0 |
1 |
1 |
|
0 |
1 |
1 |
1 |
|
1 |
1 |
1 |
1 |
Функция активации будет представлена в виде единичного скачка (рисунок 13):
f(x) =
Рисунок 13. Функция единичного скачка Хэвисайда.
В итоге мы получим следующую модель нейронной сети (рис. 14), где веса подобраны вручную, чтобы выходной нейрон соответствовал данным (Таблица 1).
Рисунок 14. Простая модель нейронной сети.
Прелесть нейросети заключается в том, что добавляя внутренние слои, можем усложнять и делать обобщение, что не свойственно делать обычному алгоритму.
Что имеется под обобщением? Изменим таблицу 1 исторических наблюдений, представим, что 1 и 2 параметры активны, а третий не активный, тогда на выходе 0. При случае активности 2 и 3 параметра, а первый не активный, тогда на выходе 1. Что если сочетание некоторых пар, представленных выше, приводят к более новому качественному показателю. Подобрать коэффициенты (веса), которые соответствуют таблице 2 уже очень затруднительная задача, и не всегда это возможно, нужно иметь обобщения, т.е. выборка сочетаний параметров, при которых происходит или не происходит действие. При этом каждый из этих случаев в разных комбинациях вносит разный вес, как пример, если активны в рассматриваемом примере и первый и второй параметр, и пусть ещё есть с десяток других параметров, то результат на выходе будет 0. Т.е исторически проанализировано, что при рассматриваемой комбинации всегда на выходе был 0.
Таблица 2. Исторические события активации нейрона
Входы |
Выход |
|||
param_1 |
param_2 |
param_3 |
y |
|
1 |
1 |
0 |
0 |
|
0 |
1 |
1 |
1 |
Теперь рассмотрим вопрос с дополнительным уровнем нейронов - добавим скрытый слой. В скрытом слое первый нейрон обобщает параметры 1 и 2, активационная функция нейрона остаётся прежней (1). Веса соответственно (0,25; 0,25; 0). Второй нейрон скрытого слоя должен быть похожем на предыдущий пример. И должен решать всё точно также с тем самым исключением, что вес параметра 3 должен перевешивать параметр 2. Веса на вход второго скрытого нейрона будут (0,5; -0,4; 09). Получили два обобщения (рис.15). Вообще количество обобщений не ограничено, в зависимости от архитектуры нейронной сети.
Рисунок 15. модель нейронной сети со скрытым слоем.
В данном случае если входные сигналы 0 или 1, то на три бита получим ограниченное количество комбинаций 23, и большее количество внутренних нейронов не имеет смысла.
Последняя стадия - передача на входной нейрон. Вес первого нейрона скрытого слоя, обобщающий 1 и 2 параметры, будет иметь вес -1, т.е. в любой комбинации входных нейронов, его ответ будет отрицательный. А второй нейрон скрытого слоя будет иметь вес 1. В случае если оба нейрона скрытого слоя сработают:
=()
f(x) =
,
Y=
В реальной жизни подобрать веса нейронам не так просто. Для этого используют обучение нейронной сети. Это и есть процесс нахождения корректных коэффициентов (весов) нейронов.
Находить веса очень трудно, и очень сложно составить архитектуру нейронной сети: количество слоёв в сети, как производится передача сигнала: с петлями или без.
8.2 Пример нейронной сети на Python
Моделирование нейронной сети будет производиться на языке программирования Python. Программный код представлен в Приложении 1. Для работы необходимо импортировать библиотеку Numpy для работы с матрицами. Дальше есть три входных сигнала (param_1; param_2; param_3) и должны принимать значения 0 либо 1.
Функция активации применяется ко всем нейронам скрытого и выходного слоя. Если сумма больше или равна 0,5 тогда 1, иначе на выходе 0.
Метод predict (прямое распространение сигнала) будет запускать всю нейронную сеть и делать вычисления. В данном случае сеть не надо тренировать, коэффициенты были подставлены вручную. Метод из представленных значений создает матрицу 1х3. Дальше есть два вектора, веса первого и второго нейронов скрытого уровня образуют матрицу 2x3
Проверим какой результат выдаст нейросеть при:
param_1 = 0.0
param_2 = 1.0
param_3 = 1.0
Результат:
В таблица 3 представлены предсказания действий нейронной сетью, в зависимости от входных параметров. По результату выходных значений можно классифицировать входные параметры в две группы. Что важно в анализе данных интернета вещей.
Таблица 3.
Входы |
Выход |
|||
Param_1 |
Param_2 |
Param_3 |
||
0 |
0 |
0 |
0 |
|
0 |
0 |
1 |
1 |
|
0 |
1 |
0 |
0 |
|
0 |
1 |
1 |
1 |
|
1 |
0 |
0 |
1 |
|
1 |
0 |
1 |
1 |
|
1 |
1 |
0 |
0 |
|
1 |
1 |
1 |
0 |
В рассмотренном примере не производилось обучение нейросети, и веса нейронов были подобраны вручную. Целью примера была показать принцип работы нейронной сети.
8.3 Обучение нейронной сети методом обратного распространения ошибки
На предыдущем примере была представлена функция активации, разделяющая результат на два строгих условия 0.5>x? 0.5 использовалась в первых нейронных сетях однослойном перцептроне.
В этом разделе будет рассмотрено, как тренируется сеть с помощью проб и ошибок, постепенно подстраиваясь под реалии мира с помощью метода обратного распространения ошибки. Как упоминалось выше, обучение нейронной сети - процесс подбора весов, позволяющих решить нейронной сетью поставленную задачу.
При обучении нейронной сети методом обратного распространения ошибок к функции активации предъявляются требования непрерывности, дифференцирования [39]. Чаще используют в качестве функции активации - сигмоидную:
f(x) =
Производная сигмоидной функции:
f'(x) = f(x)*(1- f(x))
Сигмоидная функция сглаживает переход между двумя состояниями, и монотонно переходит из одного состояния в другое. Функция неразрывна, гладкая, и дифференцирована на всём участке (рис. 16)
Рисунок 16. Сигмоидная функция и её производная.
Рассмотрим архитектуру ранее представленной нейронной сети, с сигмоидной функцией активации.
В классическом варианте обучения нейронной сети, перед тем как она начнёт работать, необходимо пройти определённые шаги.
В первую очередь выставляются в произвольном порядке коэффициенты (веса) в нейронный сети в диапазоне от 0 до 1. Полученная нейросеть не отлажена (Рис. 17). Сеть уже может решать задачи, но из-за того, что она не натренирована методом проб и ошибок, она понятия не имеет как решать задачи.
Необходимо произвести вычисление нейронной сетью на основании исторической выборки (таблица 2), где первый и второй параметры активны, тогда на выходе должен получиться отрицательный ответ. Отрицательным ответом будет считаться значение y <0,5.
Рисунок 17. Рандомное распределение весов в нейронной сети
Значения нейронов скрытого слоя:
=()
Полученные значения пропускаем через функцию активации:
f(x) =
На выходном нейроне получаем следующее значение:
Y=
В результате 0,63 > 0,5 по условию 0.5>x? 0.5 получили положительный результат, т.е 1. Что не соотносится с таблицей 2 исторических наблюдений.
Теперь имея историческую выборку и получив значение, предсказанное сетью, можно начать обучение нейронной сети. Обучение нейронной сети будет проводиться по методу обратного распространения ошибки, то есть значения весов будут вычисляться с выхода ко входу, передавая на каждом этапе ошибку.
Необходимо вычислить ошибку. Ошибка E - есть разница между текущим результатом и ожидаемым. Ожидаем мы 0, то есть отрицательный результат:
E= y - ?
E= 0,63-0= 0,63 - ошибка последнего слоя.
Далее, необходимо посчитать дельту весов. Дельта весов - число, на которое будут подкорректированы веса. Дельта весов рассчитывается по следующей формуле:
ДW = E * f'(x) , где
f'(x) =f(x)*(1- f(x))
f'(x) = 0,63*(1- 0,63) = 0,37
ДW = 0,63 * 0,37=0,23
Чтобы посчитать сдвиг на каждый вес, необходимо выполнить следующую операцию:
От первого нейрона скрытого слоя к выходному нейрону
, где
- текущее значение веса нейрона;
x - значение предыдущего нейрона;
ДW - дельта сдвига весов;
h - искусственно подбираемый параметр, на сколько быстро сеть должна быстро обучатся для получения необходимого результата. Если значение будут очень большими, то сеть быстро схватит самые очевидные вещи и плохо решать нюансы. Если же индекс поставить очень маленький, то сеть будет тренироваться бесконечно. h - это индекс, значение которого является шагом изменяющим текущий вес, пока не достигается оптимальное значение искомого веса. В данном случае установим значение h = 0,1
= 0,35 - (0,69* 0,23*0,1)= 0,348
Аналогично считаем вес второго нейрона скрытого слоя:
= 0,40 -(0,73*0.23*0.1) =0,383
Была рассчитана ошибка конечного нейрона. По приведённым выше формулам необходимо посчитать ошибку для нейронов скрытого слоя. Там ошибка не такая очевидная, т.к. это внутреннее состояние сети. Здесь раскрывается суть метода распространения ошибки, рассчитанную ошибку для выходного нейрона отправляем назад на предыдущие уровень.
Тогда ошибка первого нейрона скрытого слоя:
E1 = * ДW
E1 = 0,348 * 0,23 = 0,08
Использую значение ошибки первого нейрона скрытого слоя можно применить все прошлые формулы повторить операцию уже для этого нейрона.
f'(x) =f(x)*(1- f(x))
f'(x)=0.69*(1- 0.69) = 0.21
ДW = 0,69 * 0,21=0.145
Аналогично рассчитываются оставшиеся веса к другим нейронам.
Когда прошлись по сети методом обратного распространения ошибки, сеть немного обучилась. Вопрос - сколько таких итераций необходимо провести чтобы сеть сошлась и корректно обучалась на полученном результате? Обязательным условием обучения сети по методу обратного распространения ошибки является обучение на разных данных. Если выполнять всегда обучение на одинаковых данных, то сеть выучит только предложенную комбинацию входных значений. Нейронной сети необходимо подавать разные случаи и ожидаемый результат, и обратным распространением ошибки обучать.
Обучение сети
Для практики потребуются библиотеки numpy -работа с массивами данных (матрицы и вектора), sys - для печати на экран.
Создаём класс «Neuron Network», добавляем конcтруктор “_init_” на вход принимает коэффициент h (шаг обучения)- learning_rate, с установленным вручную значением 0,1.
Описываем веса от входных нейронов к скрытому слою в рандомном значении, и со скрытого слоя к выходному тоже в рандомное значение.
К каждому вектору в матрице будет применена сигмоидная функция.
Далее применяем метод Predict, вычисления проходят от входных нейронам к выходным. На выходе получаем значение в диапазоне 0? y ?1. И дополнительное условие: больше y0,5 значит 1, в противном случае 0.
Далее рассмотрим обучение методом обратного распространение ошибки. Вычисляем значение ошибки разницей между полученным значением и достоверным значением.
Качество обучения сети будет оцениваться по cреднеквадратическому отклонению, которое на вход принимает два значения, предсказанное и из статистическое, вычитается и возводится в квадрат. Если ошибка растёт в значениях, то квадрат увеличивает значение.
Указываем все случае на которых будет обучаться сеть, представлены массивом из вариаций событий и что сеть должна предсказать согласно полученным данным по таблице 3.
Следующая часть программного кода будет проводить тренировку сети. Здесь важны следующие параметры: эпоха - сколько раз через сеть буду выполнены итерации над заранее известными данными и шаг обучения h - learning_rate- на сколько быстро должна сдвигаться сеть должна сдвигаться на каждой итерации обучения в тусторону в которую предполагает сдвигаться.
При количестве 6500 эпох и шаге 0,05 ошибка обучения составила 0,056 единиц, что достаточно хороший результат. В таблице 4 и на рисунке 18 представлена зависимость количества эпох и шага обучения
Таблица 4. Значение ошибки от количества эпох и шаге обучения
значение ошибки при шаге: |
|||||||
Эпохи |
h=0,2 |
h=0,15 |
h=0,1 |
h=0,07 |
h=0,05 |
h=0,01 |
|
50 |
0,205 |
0,191 |
0,248 |
0,272 |
0,232 |
0,366 |
|
100 |
0,215 |
0,232 |
0,207 |
0,242 |
0,243 |
0,299 |
|
500 |
0,16 |
0,131 |
0,235 |
0,244 |
0,224 |
0,26 |
|
1000 |
0,126 |
0,085 |
0,102 |
0,129 |
0,133 |
0,242 |
|
1500 |
0,109 |
0,068 |
0,081 |
0,127 |
0,214 |
0,208 |
|
2000 |
0,096 |
0,073 |
0,12 |
0,095 |
0,137 |
0,145 |
|
2500 |
0,093 |
0,125 |
0,109 |
0,077 |
0,12 |
0,222 |
|
3000 |
0,091 |
0,071 |
0,072 |
0,078 |
0,126 |
0,152 |
|
3500 |
0,062 |
0,04 |
0,075 |
0,077 |
0,101 |
0,205 |
|
4000 |
0,06 |
0,082 |
0,071 |
0,099 |
0,08 |
0,161 |
|
4500 |
0,062 |
0,092 |
0,066 |
0,069 |
0,077 |
0,206 |
|
5000 |
0,024 |
0,08 |
0,086 |
0,096 |
0,083 |
0,182 |
|
5500 |
0,055 |
0,064 |
0,066 |
0,072 |
0,061 |
0,132 |
|
6000 |
0,021 |
0,028 |
0,066 |
0,067 |
0,072 |
0,144 |
|
6500 |
0,051 |
0,064 |
0,066 |
0,071 |
0,056 |
0,199 |
На рисунке 18 видно, что с увеличением количества эпох постепенно уменьшается значение ошибки. При малом шаге h=0.01 нейронная сеть долго обучается. При шагах обучения в диапазоне от 0,2 до 0,1 сеть достаточно быстро обучается, но из-за большого шага, при анализе данных существует вероятность среза части данных. Лучшие значения обучения нейронной сети были достигнуты в диапазоне размера шага от 0,1 до 0,05. Основная цель обучения сети - минимизация ошибки.
В следующей части кода отображается предсказание сети на предоставленных данных сети с реальным значением при ошибке обучения 0,056. Видно, что сеть достаточно успешно справилась с предсказанием.
Рисунок 18. Значение ошибки сети от размера шага обучения и количества эпох
В числовых значениях предсказания мы получим следующий результат. По ним можно оценить, насколько сеть уверена в предсказании.
И в итоге получаем следующие значения весов к скрытому и выходному слоям при ошибке в 0,056.
В результате ограниченного набора данных нейронная сеть может переобучиться, то есть хорошо работать только на знакомой выборке данных, и выдавать ошибки на незнакомых выборках.
Выводы
Интернет вещей состоит из огромного количества устройств, которые подключены к друг другу и передают огромные объемы данных. Приложения интернета вещей предоставляют услуги в различных сферах деятельности человека. Эти услуги могут быть улучшены и оптимизированы путем анализа данных методами машинного обучения. Необходимо учитывать несколько фактов при применении алгоритмов машинного обучения для анализа данных. Первое, что различные приложения интернета вещей имеют свои характеристики в виде количества устройств и типов данных, которые они генерируют. Второе, сгенерированные данные имеют специфические особенности, которые должны быть учтены.
Источники литературы
1. А.В. Росляков, С.В. Ваняшин, А.Ю. Гребешков. «Интернет Вещей.» Учебное пособие. Поволжский государственный университет телекоммуникаций и информатики. Самара 2015
2. William Stalings., The Internet of Things: Network and Security Architecture. // The Internet Protocol Journal. - 2015. - Volume 18. -№ 4. - C. 2-24.
3. International Telecommunication Union, Overview of the Internet of things, Recommendation ITU-T Y.2060, June 2012.
4. ITU-T, “Common Requirements and Capabilities of a Gateway for Internet of Things Applications,” Recommendation Y.2067, June 2014.
5. Пальмов С.В. Интеллектуальный анализ данных. Учебное пособие. Поволжский государственный университет телекоммуникаций и информатики. Самара 2017г.
6. M. A. Burhanuddin, , Ali Abdul-Jabbar Mohammed, Ronizam Ismail and Halizah Basiron., Internet of Things Architecture: Current Challenges and Future Direction of Research. // International Journal of Applied Engineering Research. - 2017. Volume 12. - № 21. С.11055 - 11061
7. K. P. Murphy, Machine learning: a probabilistic perspective, MIT press, 27.2012
8. Горбань А.Н. Дунин-Барковский В.Л., Кирдин А.Н, Миркис Е.М., Новоходько A.Ю., Нейроинформатика.
9. Карпинская А.В. Методы построения неполносвязных нейронных сетей и их приложения в задачах прогнозирования. Дипломная работа. МГУ им. Ломоносова. Москва 2010г.
Приложение
Исходный код программы simpleneural.PY
import numpy as np
# Значение на входном слое нейнонной сети
param_1 = 1.0
param_2 = 1.0
param_3 = 1.0
# Функция активации единичного скачка, при x<0.5, тогда 0.
def activation_function(x):
if x >= 0.5:
return 1
else:
return 0
# Описание модели нейронной сети
def predict(param_1, param_2, param_3):
inputs = np.array([param_1, param_2, param_3])
#Вектор весов к 1 нейрону скрытого уровня от входов
weights_input_to_hiden_1 = [0.25, 0.25, 0]
#Вектор весов ко 2 нейрону скрытого уровня от входов
weights_input_to_hiden_2 = [0.5, -0.4, 0.9]
weights_input_to_hiden = np.array([weights_input_to_hiden_1, weights_input_to_hiden_2])
#Вектор весов от скрытого уровня к выходному нейрону
weights_hiden_to_output = np.array([-1, 1])
#Входные импульсы перемноженные на веса к скрытому слою
hiden_input = np.dot(weights_input_to_hiden, inputs)
print("hiden_input: " + str(hiden_input))
#Применение функции активации к выходным данным из скрытого слоя
hiden_output = np.array([activation_function(x) for x in hiden_input])
print("hiden_output: " + str(hiden_output))
#Вычисление значения на выходе
output = np.dot(weights_hiden_to_output, hiden_output)
print("output: " + str(output))
return activation_function(output) == 1
print("result: " + str(predict(param_1, param_2, param_3)))
Исходный код программы trainingneural.PY
import numpy as np
import sys
class NN(object):
def __init__(self, learning_rate=0.1):
self.weights_0_1 = np.random.normal(0.0, 1, (2, 3))
self.weights_1_2 = np.random.normal(0.0, 1, (1, 2))
self.sigmoid_mapper = np.vectorize(self.sigmoid)
self.learning_rate = np.array([learning_rate])
def sigmoid(self, x):
return 1 / (1 + np.exp(-x))
def predict(self, inputs):
inputs_1 = np.dot(self.weights_0_1, inputs)
outputs_1 = self.sigmoid_mapper(inputs_1)
inputs_2 = np.dot(self.weights_1_2, outputs_1)
outputs_2 = self.sigmoid_mapper(inputs_2)
return outputs_2
def train(self, inputs, expected_predict):
inputs_1 = np.dot(self.weights_0_1, inputs)
outputs_1 = self.sigmoid_mapper(inputs_1)
inputs_2 = np.dot(self.weights_1_2, outputs_1)
outputs_2 = self.sigmoid_mapper(inputs_2)
actual_predict = outputs_2[0]
error_layer_2 = np.array([actual_predict - expected_predict])
gradient_layer_2 = actual_predict * (1 - actual_predict)
weights_delta_layer_2 = error_layer_2 * gradient_layer_2
self.weights_1_2 -= (np.dot(weights_delta_layer_2, outputs_1.reshape(1, len(outputs_1)))) * self.learning_rate
error_layer_1 = weights_delta_layer_2 * self.weights_1_2
gradient_layer_1 = outputs_1 * (1 - outputs_1)
weights_delta_layer_1 = error_layer_1 * gradient_layer_1
self.weights_0_1 -= np.dot(inputs.reshape(len(inputs), 1), weights_delta_layer_1).T * self.learning_rate
def MSE(y, Y):
return np.mean((y-Y)**2)
train = [
([0, 0, 0], 0),
([0, 0, 1], 1),
([0, 1, 0], 0),
([0, 1, 1], 1),
([1, 0, 0], 1),
([1, 0, 1], 1),
([1, 1, 0], 0),
([1, 1, 1], 0),]
epochs = 6500
learning_rate = 0.05
network = NN(learning_rate=learning_rate)
for e in range(epochs):
inputs_ = []
correct_predictions = []
for input_stat, correct_predict in train:
network.train(np.array(input_stat), correct_predict)
inputs_.append(np.array(input_stat))
correct_predictions.append(np.array(correct_predict))
train_loss = MSE(network.predict(np.array(inputs_).T), np.array(correct_predictions))
sys.stdout.write("\rProgress: {}, Training loss: {}".format(str(100 * e/float(epochs))[:4], str(train_loss)[:5]))
for input_stat, correct_predict in train:
print("For input: {} the prediction is: {}, expected: {}".format(
str(input_stat),
str(network.predict(np.array(input_stat)) > .5),
str(correct_predict == 1)))
for input_stat, correct_predict in train:
print("For input: {} the prediction is: {}, expected: {}".format(
str(input_stat),
str(network.predict(np.array(input_stat))),
str(correct_predict == 1)))
network.weights_0_1
network.weights_1_2
Размещено на Allbest.ru
Подобные документы
Различные методы решения задачи классификации. Нейросетевые парадигмы, методы обучения нейронных сетей, возникающие при этом проблемы и пути их решения. Описание программной реализации классификатора, его функциональные возможности и результаты обучения.
дипломная работа [1,0 M], добавлен 28.12.2015Искусственные нейронные сети как одна из широко известных и используемых моделей машинного обучения. Знакомство с особенностями разработки системы распознавания изображений на основе аппарата искусственных нейронных сетей. Анализ типов машинного обучения.
дипломная работа [1,8 M], добавлен 08.02.2017Диагностический анализ изучения алгоритмов обучения нейронных сетей "с учителем". Сбор входных и выходных переменных для наблюдений и понятие пре/пост процессирования. Подготовка и обобщение многослойного персептрона, модель обратного распространения.
курсовая работа [249,3 K], добавлен 22.06.2011Архитектура систем интернета вещей. Модели взаимодействия устройств интернета вещей. Связи устройство-устройство, устройство-облако, устройство–шлюз. Модель передачи данных в бэк-энд. Алгоритмы обработки данных. Проведение анализа данных в маркетинге.
дипломная работа [643,8 K], добавлен 17.06.2017Популярность алгоритмов машинного обучения для компьютерных игр. Основные техники обучения с подкреплением в динамической среде (компьютерная игра "Snake") с экспериментальным сравнением алгоритмов. Обучение с подкреплением как тип обучения без учителя.
курсовая работа [1020,6 K], добавлен 30.11.2016Создание системы предобработки данных; разработка системы классификации на базе методов и алгоритмов машинного обучения, их реализация в программной системе. Предобработка информации, инструкция пользователя, система классификации, машинный эксперимент.
дипломная работа [917,1 K], добавлен 31.01.2015Использование классификаторов машинного обучения для анализа данных. Создание модели, которая на основании параметров, влияющих на течение диабета, выявляет показатель возвращения больного в ухудшенное состояния после оказанного лечения (реадмиссию).
дипломная работа [625,2 K], добавлен 10.06.2017Система компьютерной обработки данных для сбора, систематизации, статистической обработки, анализа результатов учебного процесса за четверть, полугодие, год. Модуль обработки данных о качестве обучения, итогов успеваемости и данных о движении учащихся.
реферат [22,5 K], добавлен 05.02.2011Анализ проблем, возникающих при применении методов и алгоритмов кластеризации. Основные алгоритмы разбиения на кластеры. Программа RapidMiner как среда для машинного обучения и анализа данных. Оценка качества кластеризации с помощью методов Data Mining.
курсовая работа [3,9 M], добавлен 22.10.2012Модели развертывания и облачные модели. Анализ существующих методов информационной безопасности. Обеспечение надежного шифрования данных при передаче их от пользователя к провайдеру услуг по хранению данных. Минимизация нагрузки на облачные сервисы.
дипломная работа [839,1 K], добавлен 17.09.2013