> 1 <

Автор Сообщение

FreeV

Members


Статус

52 сообщений

Где: Russia astral
Род занятий:
Возраст:

#525   2009-07-21 21:25 GMT+3 часа(ов)      
Привел к логической паузе (до логического завершения еще далеко) разработку нейросетевого симулятора.
Пока только многослойный перцептрон и алгоритм обратного распространения - но это фактически основа.

Научил его распознавать буквы (на вход подаются png-файлы 15x15 пикселей, на выходе буква.
Результаты вполне радуют, несмотря на некоторое количество нерешенных моментов.

На обучающем множестве (24 латинских заглавных буквы, по 8 примеров каждой буквы) после тренировки из 192 примеров правильно распознавались 190 (2 ошибки), на тестовом множестве - из 48 примеров 5 ошибок (< 10 %).

Если кому интересно, могу выложить исходники и все 240 png-картинок (ибо рисовать их вручную оччень утомительно), могу даже немного прокомментировать =)


Работу прервала неожиданная поломка slime, который вроде бы беспричинно отказывается компилороваться под sbcl. (Также есть allegro cl, но для запуска примочки для декодирования png-файлов нужен cl-png через asdf, которого нет в allegro cl).
В дальнейшем планирую замутить "антикаптчу" (защиту от автоматической регистрации на ряде сайтов, где нужно ввести цифры с картинки)

отредактировал(а) FreeV: 2009-07-22 05:29 GMT+3 часа(ов)

FreeV

Members


Статус

52 сообщений

Где: Russia astral
Род занятий:
Возраст:

#526   2009-07-22 00:21 GMT+3 часа(ов)      
Ура, завел-таки sbcl+slime,
развлечения продолжаются!

Delay

Members


Статус

12 сообщений
http://www.google.com
Где: Antarctica : -50 C
Род занятий: Pinguinum
Возраст: 115

#527   2009-07-22 06:40 GMT+3 часа(ов)      
Хм, антересно, я щас тоже пишу на лиспе кое-чего - "робота" главным образом для автоматизации раскрутки сайтов и поиска. До эффективности и реалистичности ещё далеко, пытаюсь делать авто-регистрацию без каптчи, определил google как функцию . Чудно:

 
(in-packege :web-finder)
(defun google (str &optional) ... )
 


использую portable-alegro-server на CLisp. SBCL меня отпугивает пока - лисп на лиспе, а вот asdf просто поставил рядом с CLisp...
foo <-> bar <-> baz атакуют // mesto tihoe

bach74

Members


Статус

40 сообщений

Где: Russia Челябинск
Род занятий: программист
Возраст: 43

#530   2009-07-22 14:24 GMT+3 часа(ов)      
FreeV
Выкладывайте. Может мне в будущем пригодится. Хотя сейчас не до этого.
Но меня может заинтересовать проблематика распознавания в связи с некоторыми задумками.
Заранее спасибо.

FreeV

Members


Статус

52 сообщений

Где: Russia astral
Род занятий:
Возраст:

#534   2009-07-22 21:13 GMT+3 часа(ов)      
Хм...
Посмотрел еще раз на свой код - что-то не нравится мне он!
Это я конкретно про распознавалку - сам симулятор переписывал больше 5 раз, и теперь вроде ничего
Перепишу еще пару раз - и она начнет нравиться.
Через пару дней, думается, выложу =)

FreeV

Members


Статус

52 сообщений

Где: Russia astral
Род занятий:
Возраст:

#550   2009-07-25 16:28 GMT+3 часа(ов)      
Собственно, первая пре-альфа-версия =)
http://slil.ru/27858583
В архиве исходные коды и примеры букв (в alpha/samples/small).
Сделал три системы: neuro, neuro-internals и neuro-test.
(require :neuro) загружает только несколько (порядка десяти) функций, которых полностью достаточно для описания и обучения нейросети.
(require :neuro-internals) экспортирует все символы.
(require :neuro-test) экспортирует только четыре символа:
"test-symbols" - функция, которая запускает тест.
запускать примерно так:
(test-symbols '((0 . 225) (1 . n) (2 . 24)) i)

'((0 . 225) (1 . n) (2 . 24)) - описание слоев: входной слой - 225 нейронов, внутренний - n нейронов, выходной - 24 нейрона.
n - количество нейронов во внутреннем слое. Хорошие значения - в диапазоне от 80 до 120. Скорость обучения сильно (экспоненциально) зависит от n.
i - количество итераций предъявления примеров (больше 20 скорее всего не потребуется).
В качестве примеров берутся png-файла 15x15 (отсюда 225 входных параметров), grayscale (набор из 240 файлов лежит в "alpha/samples/small/", 24 буквы, по 10 примеров на букву).
test-symbols делит этот набор на обучающий (8 из 10, всего 192) и тестовый (2 из 10, 48 ).
После завершения i итераций по тестовым примерам определяется качество обучения.
Если хочется большего, то можно повторить (оно спросит).
По завершении предложит созранить образ сети в neuro:*net* для дальнейших развлечений.
Потом передать эту переменную с ключом :existing-net функции test-symbols, чтобы не проводить посторное обучение.

Также можно нарисовать собственную картинку и скормить ее сети:
(neuro:test-unknown-symbol neuro:*net* путь-к-картинке)


ЗЫ. Почему 24 буквы, а не 26 - это связано с тем, что я не могу с ходу воспроизвести весь английский алфавит, и полез за этим в "Master Index" HyperSpec'a, а там не было определений на X и J =)

ЗЗЫ. У виндоюзеров может возникнуть проблема с путями к файлам, которые заданы через "/", а не "\". Решается заданием ключа "path-to-samples" или правкой кода.

ЗЗЗЫ. При большом количестве нейронов внутреннего слоя обучение длится довольно долго, хотя алгоритм обратного распространения неплохо оптимизирован. Причина в ненормальном для нейронной сети количестве входных переменных (задача распознавания образов большого размера решается грубым предварительным декодированием).

ЗЗЗЗЫ. В коде нет ни обной декларации типов. Оптимизация только алгоритмическая. Декларация всегда успеется.

Have fun! (c)

отредактировал(а) FreeV: 2009-07-25 16:44 GMT+3 часа(ов)

FreeV

Members


Статус

52 сообщений

Где: Russia astral
Род занятий:
Возраст:

#551   2009-07-25 16:46 GMT+3 часа(ов)      
Цитата
Delay :
определил google как функцию



Действительно чудно ;) А можно исходники?

bach74

Members


Статус

40 сообщений

Где: Russia Челябинск
Род занятий: программист
Возраст: 43

#556   2009-07-27 14:32 GMT+3 часа(ов)      
Скачал. Спасибо. Может в будущем понадобиться. Сейчас просто времени нет разбираться.

Delay

Members


Статус

12 сообщений
http://www.google.com
Где: Antarctica : -50 C
Род занятий: Pinguinum
Возраст: 115

#561   2009-07-29 08:08 GMT+3 часа(ов)      
Я хоть в нейронных сетях не разбираюсь (была попытка изучить одну книгу, но как-то не пошло) неустоял, тоже посмотрел. Вообще трудно вникнуть сразу в логику, мне по крайней мере. Например - будет сеть учится на произвольных картинках, цветных например?

Цитата
А можно исходники


Пасибо конечно, но это "исходники" - в кавычках. Дело в том, что я только начал претворять в жизнь эти идеи, можно конечно упаковать всё и назвать как нибудь вроде web-lib.0.0.1.tar.gz, хотя точнее будет web-treep.1KB.tar.gz ;)

Вот, пока я решил всё-таки не использовать серьезных библиотек вроде Allegro Serve и даже кода из PCL - зачем брать код, который не доконца понимаешь? Пишу всё с нуля, возможно стоит создать тему про WEB и (или vs?) Lisp и там писать код? Вам, например, чтобы достать контрольную картинку с сайта и отдать её нейро-сети тоже придется иметь дело с разбором html...

Парочка отрывков:

 
(in-package :cl-user)
 
(defpackage :web.find
(:use :cl :web.client :web.uri :web.html :defines)
(:export
#:google.ru ))
 
(in-package :web.find)
 
(defconstant google-host "www.google.ru")
 
(defun html.google (ask lang)
(let ((url (+. "/search?hl=" lang
"&q=" (uri-quote (substitute #\+ #\ ask))
"&btng=lisp finder...&lr=") ))
(html-client google-host url)))
 
(defun html.google.ru (ask) (html.google ask "ru"))
 
(defun google.ru (ask) (?html.parse? (html.google.ru ask "ru")))
 


Функция html.google принимает строчку с текстом (вопрос) и язык, возвращает html код ответа. На её основе определяется функция русского поиска. Итоговая google.ru пока не готова, потому что я не определился с тем как лучше представлять ответ - строкой, списком или хэшем, ну и парсить конечно не так просто ))

Теперь о вспомогательных пакетах. В :web.uri пока только функция uri-quote - аналог quote в Python.
:web.client основан на сокетах, вот он:

 
(in-package :cl-user)
 
(defpackage :web.client
(:use :cl :defines)
(:export
#:socket-client
#:http-client ))
 
(in-package :web.client)
 
(defconstant endr "~2%") ; Так должен оканчиваться сокет-запрос, иначе сервер не разберет, где его конец
 
(defun socket-client (host port form ask)
(with-output-to-string (out-str)
(with-open-stream (socket (socket:socket-connect port host :external-format :dos))
(format socket (+. form endr) ask)
(loop :for line = (read-line socket nil nil) :while line
:do (write-line line out-str)))))
 
(defun http-client (host ask &optional (form "GET ~A HTTP/1.0"))
(socket-client host 80 form ask))
 


Тут +. - это специальный макрос, вроде перегруженной функции, он складывает числа, конкатенирует строки, списки.

Есть ещё немного кода для сервера (это уже не знаю зачем), например сервер, который принимет код на лиспе, вычисляет и возвращает ответ, такой Net-REPL. Как видете пока немного.

отредактировал(а) Delay: 2009-07-29 08:45 GMT+3 часа(ов)
foo <-> bar <-> baz атакуют // mesto tihoe

FreeV

Members


Статус

52 сообщений

Где: Russia astral
Род занятий:
Возраст:

#572   2009-07-30 19:31 GMT+3 часа(ов)      
Забавно.
Это из какой-то книги или результат залета фантазии? =)

Delay

Members


Статус

12 сообщений
http://www.google.com
Где: Antarctica : -50 C
Род занятий: Pinguinum
Возраст: 115

#581   2009-07-31 03:14 GMT+3 часа(ов)      
Cам придумал, разве что там где я с сокетами работаю - взял способ из документации CLisp и ещё я этот способ сокетами на Cook Book видел. Не думаю что у меня хватило бы фантазии "угадать", как в CL можно открыть и читать сокет - все эти unwind-protect, :external-format и :dos у потоков...

З.Ы. Никогда бы не стал тупо переписывать книгу...
_____

Сегодня поглядел на html который выдает гугл, там простые признаки для ответов, думаю сделать всё-таки хэш ответов. А потом какой-нибудь grep ещё добавить. Например чтобы такой запрос устроить:

 
(grep (google.ru "Lisp") "RSDN" :link)
 


Что выдаст всё о лиспе что нашел гугл на RSDN. Вот теперь ещё забавнее ;))

отредактировал(а) Delay: 2009-07-31 03:25 GMT+3 часа(ов)
foo <-> bar <-> baz атакуют // mesto tihoe

Fallen_s4e

Members


Статус

114 сообщений
http://lisper.ru
Где: Zimbabwe lisper.ru
Род занятий: fallen_s4e
Возраст: 4

#883   2009-12-24 22:15 GMT+3 часа(ов)      
Пожалуйста перезалейте, очень бы хотел ознакомиться.

avsej

Members


Статус

1 сообщений
http://avsej.net
Где: Belarus Minsk
Род занятий:
Возраст: 30

#1474   2010-02-16 18:47 GMT+3 часа(ов)      
Цитата
FreeV :
Собственно, первая пре-альфа-версия =)
http://slil.ru/27858583



А можно куда-нибуть перезалить или опубликовать где-нибуть на github.com или gitorious.com ? там удобно писать вместе

Stepan

Members


Статус

2 сообщений

Где: Russia Perm
Род занятий:
Возраст:

#1663   2010-03-24 16:47 GMT+3 часа(ов)      
Ох уж эти нейросети. Писал курсовую - на с++, методом отжига (по Коши). Потом переписал на лиспе - в качестве тренировки. Работает оч медленно (sbcl), хотя верно. Многослойный перцептрон. Обучал на довольно необычных примерах - скачивал из инета разные данные с новостных лент и таблоидов, парсил... короче, курс доллара предсказывать пытался. По расчётам - всё сходилось (в смысле после обучения гладкая кривая, MSR -> 0 и т.п.). Но курс доллара предсказывал "с точность до флюктуации", то бижь - расхождение на 1-2%, кои и составляли всё изменение за день (потом уже прочитал про старания профиков всяких из Форбс).

отредактировал(а) Stepan: 2010-03-25 23:40 GMT+3 часа(ов)

Fallen_s4e

Members


Статус

114 сообщений
http://lisper.ru
Где: Zimbabwe lisper.ru
Род занятий: fallen_s4e
Возраст: 4

#1664   2010-03-24 18:04 GMT+3 часа(ов)      
Посоветуйте что по сабжу почитать, плз, с нуля, но емко. Раз уж курсовую писали=)

Stepan

Members


Статус

2 сообщений

Где: Russia Perm
Род занятий:
Возраст:

#1673   2010-03-25 23:39 GMT+3 часа(ов)      
ЭЭЭ. Ну если по матчасти, то монография Саймона Хайкина "Нейронные сети". Уоссермен - нейрокомпьютерная техника, практика и применение. Это самые известные наверно, там обзор всего подряд. Любые книги по ИИ, там обязательно есть разделы по нейросетям; интересными, на мой взгляд, показались "Генетические алгоритмы, нейронные сети и проблемы виртуальной реальности" Вороновский и книги по робототехнике, где примитивные алгоритмы распознавания (типа Springer, Embedded Robotics). Есть такое вот - Valluru B. Rao "C++ Neural Networks and Fuzzy Logic" - с примерами кода. Ну и по теме - "Нейрокомпьютинг и его применение в экономике и бизнесе" Ежов. А начинал с руководства к тулбоксу по матлабу. Гугль в помощь. Для ознакомительных целей, есессно. Но что-то это всё далеко от лиспа...

Fallen_s4e

Members


Статус

114 сообщений
http://lisper.ru
Где: Zimbabwe lisper.ru
Род занятий: fallen_s4e
Возраст: 4

#1676   2010-03-26 01:33 GMT+3 часа(ов)      
Цитата
Но что-то это всё далеко от лиспа...

Переживу.
Цитата
Есть такое вот - Valluru B. Rao "C++ Neural Networks and Fuzzy Logic" - с примерами кода.

От это оч интересно, хоть и на английском.
Спасибо!)
> 1 <


Онлайн :

0 пользователь(ей), 13 гость(ей) :




Реклама на сайте: