Пощупать нейросети или конструктор нейронных сетей



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



А теперь немного подробнее. С помощью этого конструктора можно создавать сети прямого распространения (Feedforward neural network) до 8 скрытых слоёв (плюс слой входов и слой выходов, итого 10 слоёв (обычно 4-х слоёв более чем достаточно)) в каждом слое до 30 нейронов (ограничение связано с тем, что всё это одновременно отображается на экране, если будут просьбы в комментариях выпущу версию без ограничений и визуализации). Функция активации всех нейронов – сигмоид на основе логистической функции. Также можно обучать получившиеся сети методом обратного распространения ошибки градиентным спуском по заданным примерам. И, самое главное, можно посмотреть на каждый нейрон в каждом отдельном случае (какое значение он передаёт дальше, его смещение (поправку, bias) – нейроны с отрицательным смещением белые, с положительным – ярко-зелёные), связи нейронов в зависимости от их веса помечены красным – положительные, синим – отрицательные, а также отличаются по толщине – чем больше модуль веса, тем толще. А если навести мышку на нейрон, то можно ещё посмотреть какой сигнал на него приходит, и какое конкретно у него смещение. Это полезно, чтобы понять, как работает конкретная сеть или показать студентам принцип работы сетей прямого распространения. Но самое главное – свою сеть можно сохранить в файл и поделиться с миром.

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

Как пользоваться конструктором


Для начала скачайте архив отсюда.

Распакуйте в корень диска D:\

Запустите NeuroNet.exe

Можете попробовать «Загрузить» какую-нибудь сеть, посмотреть на неё, нажать «Обучение», увидеть её точность, потыкать стрелки влево, вправо (по бокам), чтобы посмотреть различные варианты входных (левый столбец нейронов) и выходных (правый) данных, нажать «Стоп» и попробовать ввести свои входные данные (разрешены любые значения от 0 до 1, учитывайте это при создании своих сетей и нормализуйте входные и выходные данные).

Теперь как строить свои сети. Первым делом необходимо задать архитектуру сети (количество нейронов в каждом слое через запятую), нажать «Построить» (или сначала «Снести», затем построить, если у Вас на экране уже отображается другая сеть), нажать «Обучающая выборка», «Удалить всё» и ввести свои обучающие примеры, согласно инструкции на экране. Также можно указать на вход и на выход маленькие квадратные картинки (максимум 5х5 пикселей), из которых будут определены нормализованные значения яркости пикселей (не учитывая их цвет), для чего нужно нажать на «in» и «out» соответственно. Нажать «Добавить пример», повторить процедуру нужное количество раз. Нажать «Готово», «Обучение» и как точность станет удовлетворительной (обычно 98%), нажать «Стоп», иконку в виде дискеты (сохранить), дать сети имя и радоваться, что Вы сами создали нейросеть. Дополнительно можете устанавливать скорость обучения ползунком «Точнее/Быстрее», а также визуализировать не каждый 50й шаг, а каждый 10й или 300й, как Вам угодно.

Интеграция созданных сетей в свои проекты


Чтобы использовать свои нейросети в собственных проектах, я создал отдельное приложение doNet.exe, которое нужно запускать с параметрами: «D:\NeuroNet\doNet.exe <название сети> <входные данные через пробел>», дождаться завершения работы приложения, после чего считать выходные данные из D:\NeuroNet\temp.txt

Для примера создано приложение 4-5.exe, использующее сеть «4-5» (об этой и других сетях ниже). В этом приложении подробно расписано как правильно запускать doNet.exe

Разбор сетей, идущих в комплекте


Начнём с классики – «XOR(Полусумматор)». Среди прочих, в частности, эту задачу – сложение по модулю 2 – в 1969 году приводили в качестве примера ограниченности нейросетей (а именно однослойных перцептронов). В общем, имеется два входа (со значениями либо 0, либо 1 у каждого), наша же задача — ответить 1, если значения входов разные, 0 – если одинаковые.



Далее «Количество-единиц». Три входа (0 либо 1 на каждом). Требуется посчитать, сколько было подано единиц. Реализовано как задача классификации – четыре выхода на каждый вариант ответа (0,1,2,3 единицы). На каком выходе максимальное значение, соответственно таков и ответ.



«Умножение» – Два входа (вещественные от 0 до 1), на выход их произведение.



«4-5» – На вход подаются нормализованные значения яркости пикселей картинки 4х4, на выходе имеем нормализованные значения яркости пикселей картинки 5х5.



Сеть задумывалась, как увеличение качества большой картинки на 25%, вышел же интересный фильтр для фото:



UPD: В архив добавлено приложение NeuroNet2.exe (тот же конструктор, но без визуализации (благодаря чему работает в 2 раза быстрее) и ограничений на количество нейронов в слое (до 1024 вместо 30), также в обучающей выборке на вход и выход можно подавать квадратные картинки до 32х32). Также добавлен график обучения. Нейросетями теперь могут пользоваться (и встраивать в свои проекты (даже на сервере)) и те, кто не знает их теории! В полуавтоматическом режиме (после обучения вручную подавать на вход значения и получать результат на экране) их можно использовать даже без знания программирования!



Вот собственно и всё, жду комментариев.

P.S. Если вылезает ошибка, попробуйте зарегистрировать от администратора с помощью regsvr32 файлы comdlg32, которые также есть в архиве.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Как Вам программа?
Поделиться публикацией
Ой, у вас баннер убежал!

Ну. И что?
Реклама
Комментарии 26
    0

    Для веб браузера есть порт?

    –1
    Красава, как раз не хватало объяснять новичкам
      0
      А для linux не будет приложения?
      +1
      Если вылезает ошибка, попробуйте зарегистрировать от администратора с помощью regsvr32 файлы comdlg32, которые также есть в архиве.

      Забавное дежавю. Помню лет 15 назад (а то и больше) читал книжку про COM и там те же манипуляции были, чтобы зарегистрировать компоненты.
        0
        У всех работает? Кто что создал?
          0
          У меня одного пишет Trojan:Win32/Fuerboos.C!cl? (win10 defender)
            –1
            хз, image, вредоносным кодом не увлекаюсь
          +2
          Если оно для обучения и «пощупать», то выложили бы заодно и исходники. Хотя… оно у вас на Visual Basic?
            0
            да, на 6.0
              +4
              Ну вот смотрите — вы выбрали интересную тему, но судя по вопросам от меня и выше, отбили интерес к программе, тем что:
              — нет версии под линукс
              — нет версии под веб-браузер
              — не запускается под современные ОС без шаманстве (возможно, потому, что vb6.0 вышел в 1998 году, 20 лет назад).
              — нет исходников (не каждый захочет запускать чужой exe-файл на своей машине).

              Если бы вы использовали, например, python, то ваша программа была бы кросс-платформенной, потенциально запускалась бы в браузере (с помощью jupyter notebook), её можно было бы прочитать перед запуском и выполнить на любой современной ос, кроме того, из-за более популярного языка её вероятнее могли бы покритиковать или улучшить. А так большинство читателей посмотрят картинки, возможно запустят программу на ваших тестовых данных, и закроют навсегда.

              Заодно насчёт тестовых данных – одному вам известно, как составлять обучающие выборки и прочие текстовые файлы для программы.
                –1
                Всё верно, но я в питон не умею. Исходники могу выложить если надо. Насчёт обучающей выборки — в программе написано: Пример верных входных и выходных данных, например, если входные {0.25,0}, а выходные {1,0.01} — пишется как «0.25,0,1,0.01» Каждый такой пример с новой строки в txt-файл или вручную по одному через прогу
                  0
                  Кто готов перевести исходники на питон отписывайтесь
              0
              kl — кол-во слоёв
              l(i) — кол-во неиронов в слое i
              kolvo — кол-во обучающих примеров
              f(i,y) — значение y неирона в i слое
              d — ошибка неирона
              w — связь

              b — смещение
              osh — суммарная ошибка
              so — cкорость обучения

              вот основа:
              For i = 0 To kl
              For y = 0 To l(i) — 1
              If i = 0 Then
              f(0, y) = inp(shag Mod kolvo, y)
              Else
              f(i, y) = b(i, y)
              End If
              d(i, y) = 0
              Next
              Next
              For i = 0 To kl — 1
              For y = 0 To l(i) — 1
              For u = 0 To l(i + 1) — 1
              f(i + 1, u) = f(i + 1, u) + f(i, y) * w(i, y, u)
              Next
              Next
              For u = 0 To l(i + 1) — 1
              If f(i + 1, u) > 30 Then
              f(i + 1, u) = 30
              ElseIf f(i + 1, u) < -30 Then
              f(i + 1, u) = -30
              End If
              f(i + 1, u) = 1 / (1 + Exp(-f(i + 1, u)))
              Next
              Next
              For i = 0 To l(kl) — 1
              d(kl, i) = out(shag Mod kolvo, i) — f(kl, i)
              osh = osh + Abs(d(kl, i))
              Next
              For i = kl — 1 To 1 Step -1
              For y = 0 To l(i) — 1
              For u = 0 To l(i + 1) — 1
              d(i, y) = d(i, y) + d(i + 1, u) * w(i, y, u)
              Next
              Next
              Next
              For i = 0 To kl — 1
              For y = 0 To l(i) — 1
              For u = 0 To l(i + 1) — 1
              w(i, y, u) = w(i, y, u) + d(i + 1, u) * f(i + 1, u) * (1 — f(i + 1, u)) * f(i, y) * so
              Next
              Next
              Next
              For i = 1 To kl
              For y = 0 To l(i) — 1
              b(i, y) = b(i, y) + d(i, y) * f(i, y) * (1 — f(i, y)) * so
              Next
              Next
              +1

              Можно ли открыть текстбокс для вставки обучающей выборки из буфера обмена и добавить загрузку из тестового файла?

                0
                текстбокс открыт для вставки, снизу же лист бокс (там вставка невозможна), добавил загрузку из текстового файла (*.txt), скачайте архив заново
                  0
                  также в NeuroNet2 (архив обновлён), листбокс заменён на текстбокс в который можно вставлять и редактировать
                0
                Ну вот, опять опередили )))))
                Кстати, это отличный гуманный вариант для тех, кто хочет сделать революцию во власти!!!
                Если этот проект подхватить, то всех чиновников можно превратить в проверщиков связей всех решений нейронного правительства, то-есть создать в стране мощную вычислительную систему на специализированных процессорах военной разработки, всех чиновников послать на переквалификацию и мы избавимся сразу от античеловечности в законе и каждое решение можно будет отследить до самой мелочи, то-есть если повышение пенсии будет нужда, но этому мешает дефицит средств из-за закупки миллиона лампочек для освещения 1 туалета мэрии Москвы, то это будет ясно каждому и тот, кто это внедрил в нейронную сеть (параметр, условие), того накажут и понизят в доступе для модерации этой сети.
                Даешь нейронное правительство в XXI веке!!! )))) — сразу решаем несколько проблем:
                — передача знаний от одних к другим (достаточно 1 раз обучить и следить за процессами мышления);
                — избавляемся от постоянных социальных экспериментов при смене задниц на стульях;
                — причину любого отказа или одобрения можно отследить полностью (как в этой теме);
                — власть не только для народа, который сейчас не иначе как цифры в статистике, а сбор потребностей индивидуально от и для каждого;
                — главная цель нейронной сети: благополучие граждан федерации и бобров и синиц тоже!
                — полное отсутствие коррупции;
                Ну и тем, кто не сможет перейти из чиновников в нейропрограммистов, те будут заниматься внешней политикой, не давать ей лезть в нашу ))).
                Товарищи!!! Да здравствует нейронный социализм!!! Ура!!!
                P:S: Автор статьи, догоняй тему!!! Если чего, на PureBasice подсобим )))))
                  +1
                  За предложение помощи спасибо, можете перевести исходники на vb6 в PureBasic, чтобы можно было запускать на линухе? А идея нейронного социализма выглядит прекрасно на страницах научной фантастики, но не в реальности 21 века. Может лет через 200 где-то такое и будет. А если Вы серьезно, то это похоже на бред реформаторства — нелепые социальные реформы для блага человечества, недалеко до шизофрении, осторожно.
                  0
                  Есть еще подобный конструктор Neuroph studio.
                  Я даже делал для своих коллег пошаговую инструкцию, как распознавать пиктограммы 10х10.
                  goo.gl/dRkzfL
                    0
                    Огромное спасибо, находка этого конструктора пока-что самое главное чего я достиг после публикации этой статьи
                      0
                      Эта студия с открытыми исходниками. Иногда глючит. Было бы интересно дописать API для этой неё, чтобы можно было и сети строить программно и диалоги вызывать.
                        0
                        в справке там всё это указано как делать на джаве, только вручную(не программно) созданные сети в Neuroph почему-то из джавы не подгружаются
                    0
                    Присоединяюсь к некоторым предыдущим высказываниям. Это действительно крутая работа! Но мало применима на практике. Людям, интересующимся NN, хочется не только посмотреть их в деле, но и изнутри. И в этом плане Python — золотой стандарт в мире NN. Мне, повезло — я его как раз год потихоньку учил, когда дорвался до NN. Попробуйте TensorFlow — в принципе, там чистое ООП и Питона практически нет, если на несложных примерах. А если Keras, то вообще легкотня. С вашим уже достигнутым пониманием разберётесь на ура быстро. Потом уже сможете попробовать и с нуля что-то написать.

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

                    Самое читаемое