Ничего не найдено :(

    Перцептрон

    Сконфигурируем входы нейрона
    Перцептрон

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

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

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

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

    Устанавливаем скорость серийного порта 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;//передаем состояние входов в основной цикл
    }
    Подборки: Arduino

    Варка сургуча, смоляной рецепт

    Удобная самодельная ручка для переноски картонных коробок и не только

    Добавить комментарий

    21 комментарий
    Korolev #73901
    Феодор_2,
    насколько давно? Я ж не смогу все комментарии просмотреть.

    Извини, дружище, но не помню, где-то 21 год. Обсуждалась какая-то статья на эту тему. Попробуй по разделам прогуляться, исключив те, которые явно не по теме.

    Феодор_2 #73885
    Korolev, насколько давно? Я ж не смогу все комментарии просмотреть.


    Razrabotchik #73826

    Желание связать био-электронику с предлагаемой конструкцией приветствуется, но не надо опошлять идеи с реальностью. help Что хочет Автор?

    Korolev #73824
    Феодор_2,
    Я проводил эксперименты с ОУ и светодиодом, где пытался заставить хоть как-то реагировать схему на сокращение мышцы, результатов не было, электроника молчала.

    Покопайся, здесь уже обсуждалась подобная тема. У меня в юности работала система радиоуправления на этом принципе. Но я тогда надевал на башку "корону" с проводами, и втюхивал корешам, что управляю силой мысли!  xaxa 

    Феодор_2 #73811
    wariorjam, они будут работать без видимых задержек и подвисаний? И хватит ли потенциала у мышцы, чтобы заставить ардуино реагировать? Я проводил эксперименты с ОУ и светодиодом, где пытался заставить хоть как-то реагировать схему на сокращение мышцы, результатов не было, электроника молчала.
    wariorjam #73629 Автор

    для каждой мышцы свой нейрон Приблизительно 6 входных нейронов ардуино потянет смотря что вы хотите получить. Надеюсь вы уже с кодом розабрались и научились складывать больше нейронов для выполнения задач. Жду ответа Федор_2

    Феодор_2 #73524

    Насколько больше? Меня интересует отслеживание активности мышцы (не одной) для управления внешним устройством. Оно должно повторять движение, допустим, руки в реальном времени. Для этих задач хватит Arduino pro micro?

    wariorjam #73501 Автор

    нужно больше входных данных 

    Феодор_2 #73474
    wariorjam, как это должно выглядеть в технической и материальной части?


    wariorjam #73369 Автор
    Феодор_2,


    Возможно

    Феодор_2 #73351
    wariorjam, возможно ли использовать что-то подобное как датчик активности мускулатуры? Без дорогостоящих дополнительных датчиков и с минимальной внешней элементной базой.
    Lo #72997

    Давно искал есть ли подобное на Ардуино и от оно сдесь

    Eig #72973

    Спасибо, очень полезно для начинающих.

    У меня уже год, наверное, лежит на полке sipeed maix dock с камерой и TFT-экраном, гораздо более приспособленный для подобных игр. Никак не могу придумать, для чего его использовать. Отслеживание кошек не предлагать.

    wariorjam #72879 Автор
    filkar2005,

    Правильно вы отметили. Но как всегда есть но. Если вы когда нибудь работали с ПИД регулятором то для подбора коофициентов нужно много времени. Эту задачу легко освоит нейросеть даже такая простая как эта. здесь нужно будет просто изменять веса и получать быстрый результат. Представленная модель это и для ознакомления и для практического использования. Ведь нейрон способен в отличии от стандартного програмирования легко адаптироватся под изменяющиеся условия среды, нежели чем при обычном програмировании с зарание определенными условиями. В данном примере это называется обучение с учителем и поверьте это саый простой и самвц наглядный способ познакомится с основами ИИ. Я сам начинал с этого. Дальше сложнее. А так вообще то подумайте в живые существа работают с намного меньшими скоростями чем современные процессоры зато какие результаты.

    filkar2005 #72844
    wariorjam,


    не понятна именно осмысленность использования нейросетей на ардуино. Ни разу не пытался делать, но уверен, что скорость обучения будет очень низкой. Да и в целом, опять таки, какие задачи из тех, что ардуино может выполнить, осмысленно делать нейросетью?

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

    Хотя, конечно, можно при инициализации брать коэффициенты из файла, полученного после обучения такой-же нейросети на более мощном устройстве, тогда нейросеть можно запихнуть в ардуино и побольше...

    П.С, Я в программировании самоучка, мне реально интересно.

    Вы думаете, всё так просто? Да, всё просто. Но совсем не так.
    А. Эйнштейн
    wariorjam #72838 Автор

    Если кому интересно смогу выложить например код с подключеным дальномером как пример.

    wariorjam #72836 Автор

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

    Для тех кто не разобрался как с ним работать вмето кнопок подставте данные с ваших датчиков а если нехватает двох входов то добавте себе еще и таже история относится и к выходу нейрона, определите состояния весов и получите результат. Я сам когда начинал осваивать нейросети то сразу долго немог понять смысл происходящих процесов в нейроне пока не озорило. Ето мой первый пример для роботы и демонстрации нейросети. Мозг живого существа работает на значительно меньшей скорости зато какие результаты. Перцептрон является лишь маленькой ячейкой ИИ. Живой нейрон имеет 15000 входов и 15000 выходов.

    filkar2005 #72828
    Феодор_2, к компьютеру по штатному кабелю. И открывать монитор порта из среды ардуино.
    Вы думаете, всё так просто? Да, всё просто. Но совсем не так.
    А. Эйнштейн
    Феодор_2 #72823

    Как и куда это подключать?

    filkar2005 #72784

    Не очень понятен смысл. Ардуино слишком медленное, да и в целом малоподходящее для использования нейросетей. 

    Да и какую задачу, с которой справиться ардуино, не получиться оформить нормальным алгоритмом?

    Вы думаете, всё так просто? Да, всё просто. Но совсем не так.
    А. Эйнштейн
    Гость Вася #72780

    Очень интересная и познавательная статья.

    Привет, Гость!


    Зарегистрируйтесь

    Или войдите на сайт, если уже зарегистрированы...

    Войти

    Добавьте самоделку

    Добавьте тему

    Онлайн чат

    Последние комментарии

    Все комментарии