Разработка - Нейросети для чайников. Начало |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2016-06-09 19:00 основы нейронных сетей, Нейронные сети для начинающих, реализация нейронной сети Так получилось, что в университете тема нейросетей успешно прошла мимо моей специальности, несмотря на огромный интерес с моей стороны. Попытки самообразования несколько раз разбивались невежественным челом о несокрушимые стены цитадели науки в облике непонятных «с наскока» терминов и путанных объяснений сухим языком вузовских учебников. Цели Для чего же нужны нейросети? type Neuron = class name: string; // Тут название нейрона - буква, с которой он ассоциируется input: array[0..29,0..29] of integer; // Тут входной массив 30х30 output:integer; // Сюда он будет говорить, что решил memory:array[0..29,0..29] of integer; // Тут он будет хранить опыт о предыдущем опыте end; Создадим массив нейронов, по количеству букв: For i:=0 to 32 do begin neuro_web[i]:=Neuron.Create; neuro_web[i].output:=0; // Пусть пока молчит neuro_web[i].name:=chr(Ord('A')+i); // Буквы от А до Я end; Теперь вопрос - где мы будем хранить «память» нейросети, когда программа не работает? p:=TBitmap.Create; p.LoadFromFile(ExtractFilePath(Application.ExeName)+' es'+ neuro_web[i].name+'.bmp') В начале работы необученной программы, память каждого нейрона будет белым пятном 30х30. for x:=0 to 29 do for y:=0 to 29 do begin n:=neuro_web[i].memory[x,y]; m:=neuro_web[i].input[x,y]; if ((abs(m-n)<120)) then // Порог разницы цвета if m<250 then neuro_web[i].weight:=neuro_web[i].weight+1; // Кроме того, не будем учитывать белые пиксели, чтобы не получать лишних баллов в весах if m<>0 then begin if m<250 then n:=round((n+(n+m)/2)/2); neuro_web[i].memory[x,y]:=n; end else if n<>0 then if m<250 then n:=round((n+(n+m)/2)/2); neuro_web[i].memory[x,y]:=n; end; Как только закончится цикл для последнего нейрона - будем выбирать из всех тот, у которого вес больше: if neuro_web[i].weight>max then begin max:=neuro_web[i].weight; max_n:=i; end; Именно по вот этому значению max_n, программа и скажет нам, что, по её мнению, мы ей подсунули. s:=InputBox('Enter the letter', -программа считает, что это буква -+neuro_web[max_n].name, neuro_web[max_n].name); for i:=0 to 32 do begin //Пробегаем по нейронам if neuro_web[i].name=s then begin //В нужном нейроне обновляем память for x:=0 to 29 do begin for y:=0 to 29 do begin p.Canvas.Pixels[x,y]:=RGB(neuro_web[i].memory[x,y],neuro_web[i].memory[x,y], neuro_web[i].memory[x,y]); //Записываем новое значение пикселя памяти end; end; p.SaveToFile(ExtractFilePath(Application.ExeName)+' es'+ neuro_web[i].name+'.bmp'); Само обновление памяти будем делать так: n:=round(n+(n+m)/2); Т.е. если данная точка в памяти нейрона отсутствует, но учитель говорит, что она есть в этой букве - мы её запоминаем, но не полностью, а только наполовину. С дальнейшим обучением, степень влияния данного урока будет увеличиваться. Обучение Начнем обучение. Заключение Программа представляет собой один сплошной недостаток - наша нейросеть очень глупа, она не защищена от ошибок пользователя при обучении и алгоритмы распознавания просты как палка. Источник: habrahabr.ru Комментарии: |
|