Нейросети для самых маленьких |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2018-07-13 14:03 Привет, в данном примере я хочу показать как можно реализовать сеть Хопфилда для распознавания образов.
Я сам, как и многие в один день решил поинтересоваться программным обучением, ИИ и нейро сетями. Благо в сети есть много разборов и примеров, но все они оперируют изобилием формул функции и если ты не подкован в математике(как я), постараюсь продемонстрировать простой пример сети Хопфилда с использованием языка Golang(GO). Математическое описание сети — Сеть Хопфилда Почему именно сеть Хофпилда? Достаточно быстрый и более менее понятный пример если можно оперировать такими терминами как простой и понятный в мире ИИ. В этом примере мы попробуем распознавать образы из черно-белой картинки размером 20х20 пикселей. Попробуем разобраться в шагах которые нам предстоит выполнить прежде чем мы получим наш желанный результат:
Перейдем к коду с подробным описанием. Все библиотеки которые нам понадобятся:
Создаем массив векторов из 3 элементов(количество образцов), конвертируем изображения в вектора и добавляем образцы в массив. 'Y' вектор это тот образ который мы хотим распознать.
Создаем массив матриц, конвертируем все вектора в матрицы и добовляем их в масив матриц. Создаем заготовку матрицы W и начинаем сумирование всех матриц, результат кладем в W
Обнуляем матрицу по диагонали
Создаем заготовку выходного вектора, умножаем матрицу на Y вектор, полученый результат кладем в вектор S и подставляем его обратно на умножение.
Подробнее по поводу функции sigmod(). Это функция активации F и принцип ее работы(в нашем примере) заключается в том что бы преобразовать данные в выходящем векторе и привести их или к 1, или к -1. Так как мы работаем с биполярной сетью то и данные могут быть только 1 и -1. Изображение следует привести из RGB к 1 и -1, где сумма всех точек деленная на 3(условная яркость пикселя) должна стремиться к черному или белому цвету. Так как R = 255, G = 255, B = 255 это белый цвет, а R = 0, G = 0, B = 0 черный. Я выбрал порог в 150, следовательно что больше или равно 150 будет белым(1) все что меньше черным(-1), где выбор между черным в -1 и белым в 1 может быть условным, все что нам нужно это разложить черный и белый по значениям. Белый может быть так же -1, а черный 1, в данном случае это не играет роли. Так же стоит учесть что мы работаем с симметричной матрицей и изображения должны быть равносторонними. Для того что бы преобразовать изображение в вектор нужно представить изображение как матрицу которую мы режем по горизонтали и каждый отрезанный слой (а у нас их будет 20) добавляем в конец предыдущего слоя и получаем вектор длиной в 400 (20x20). В примере я не проверяю выходной вектор на устойчивость, а просто прохожу по циклу 100 раз, и в конце проверяю на какой из образцов похож наш результат. Сеть или отгадывает или же нет при этом выдавая так называемую химеру или вольную интерпретацию того что она смогла увидеть. Это результат я сохраняю в изображение. Так ка мы используем синхронный режим сети Хопфилда, то и результат будет слабый. Конечно можно использовать асинхронный, что займет больше времени и ресурсов, но и результат будет на много лучше. Пример работы: Входной образ — Ответ — Исходные образы Весь код package main Источник: habr.com Комментарии: |
|