wariorjam

wariorjam

Пикабушник
95 рейтинг 1 подписчик 0 подписок 1 пост 0 в горячем
10

Перцептрон

Предлагаю Вашему вниманию пример перцептрона реализуемым на ардуино.

Перцептрон является минимальной ячейкой нейросети.И так что бы не лить лишнюю воду приступим. Для реализации будет использована платформа ардуино уно.


Начнем !

Сконфигурируем входы нейрона.

Устанавливаем первоначальные веса нейрона.

Устанавливаем первоначальное состояние нейрона.

Первоначальное состояние на входе и выходе нейрона.

Конфигурируем порты программы.

Устанавливаем скорость серийного порта 9600 бод а также подтягиваем две кнопки на внутреннее сопротивление командой INPUT_PULLUP и конфигурируем выход нейрона на 13 пин ардуино (можете назначить любой свободный порт также как входные нейроны).

Основной цикл программы.

Основная программа обработки сигналов в самом нейроне и формирование выходного ответа после получения входных данных.

Обработка сигналов на входе нейрона, в принципе поэкспериментировав с кодом, вы сможете подать сигналы с чего угодно, нейрону все равно какие данные вы подадите на вход.

Полный листинг приведен ниже, пользуйтесь и осваивайте. Сфера применения ограничена только вашей фантазией.

Старался максимально объяснить каждую строчку кода. Сам знаю как новичкам или даже опытным программистам разберётся с чужим кодом или пытаться его адаптировать под свой проект. В дальнейших статьях постараюсь показать где я его применяю на практике. Занимаюсь Нейросетями давно и буду выкладывать свои наработки по мере возможности и время. Вопросы и комментарии можете оставлять если будут какие то вопросы то постараюсь на них ответить.


// Вход нейрона

const int en1 = 12;//определяем вход нейрона

const int en2 = 11;//определяем вход нейрона

const int z_out = 13;//определяем выход нейрона

// Веса нейрона

float w1 = 0.5;//определяем веса нейрона

float w2 = 0.3;//определяем веса нейрона

float theta = 0.6;// сдиг нейрона для предотвращения переобучения

float z = 0;//начальное состояние нейрона

//Состояние входа и вихода нейрона

int x1 = 0;//определяем состояние на входе нейрона

int x2 = 0;//определяем состояние на входе нейрона

int zr = 0;//определяем состояние на выходе нейрона

void setup() {//Конфигурация портов програмы

Serial.begin(9600);//скорость роботы порта

pinMode(en1, INPUT_PULLUP);//вход первого порта

pinMode(en2, INPUT_PULLUP);//вход второго порта

pinMode(z_out, OUTPUT);//выходной порт

}

void loop() {//основной цикл програмы

neyron();//обработка сигналов в самом нейроне

z = ((x1 * w1) + (x2 * w2)) - theta;//перещитываем состояния на входе нейрона

if (z >= 0)//если состояние нейрона после перещета больше 0 то...

{

digitalWrite(z_out, HIGH);//на цыфровом пине устанавливаем состояние

zr = 1;//пишем выход нейрона как высокий

}

else//если нет то...

{

digitalWrite(z_out, LOW);//на цыфровом пине устанавливаем состояние

zr = 0;//пишем выход нейрона как низкий

}

Serial.print("x1 = ");//выводим в серийный порт надпись

Serial.print(x1);//выводим в серийный порт состояние первого входа

Serial.print("x2 = ");//выводим в серийный порт надпись

Serial.print(x2);//выводим в серийный порт состояние второго нейрона

Serial.print("zr = ");//выводим в серийный порт надпись

Serial.print(zr);//выводим состояние нейрона на выходе

delay(50);//утанавливаем задержку

}

void neyron()//обработка входных сигналов поступающих в нейрон

{

if (digitalRead(en1) == LOW)//если после считывание первого входа состояние низкое то ...

{

x1 = 1;//устанавливаем на первом входе нейрона 1

}

else//если нет то...

{

x1 = 0;//устанавливаем на первом входе нейрона 0

}

if (digitalRead(en2) == LOW)//если после считывание первого входа состояние низкое то ...

{

x2 = 1;//устанавливаем на втором входе нейрона 1

}

else//если нет то...

{

x2 = 0;//устанавливаем на первом входе нейрона 0

}

return x1, x2;//передаем состояние входов в основной цикл

}

Показать полностью 8
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества