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

Форум работает в режиме архива, только для чтения и поиска.
Архив 2004 Архив 2007 Архив 2013

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.11.2010, 13:48
Новичок

Отправить личное сообщение для R1der Посмотреть профиль Найти все сообщения от R1der
 
Регистрация: 16.11.2010
Сообщений: 6

Нейронные сети для распознавания изображений
Доброго времени суток уважаемые форумчане!

Стоит задача расспознавания зашумленного текста(печатного).
Для реализации решил выбрать нейронные сети. Разобрадся немного, очень сложно найти литературу. Прошу ответить на пару вопросов.

1. Какой тип нейронной сети использовать для распознавания? Сколько слоев нейронов и какая должна быть структура
2. Возможно ли с помощью нс чистить изображения от шумов?
Для этого нужна другая нейронка? Дефекты( линии сгиба, чирканье ручкой и тому подобные)
3. Где можно почитать хорошенько по данной теме но не строго мат.текст
4. После обучения сеть ищет похожие символы или сверяется с образцом из базы обучения? Я понимая что логика там нечеткая,но не совсем ясно как сеть понимает к какому ответу ближе входной сигнал?

Большое спасибо за ответы
  #2  
Старый 16.11.2010, 15:52
гость

 
Сообщений: n/a

Цитата:
Для реализации решил выбрать нейронные сети.
А чего так? Вроде бы не самый лучшый off-the-shelf алгоритм. Попробуй svm - проще настраивать, получше работает.

Цитата:
1. Какой тип нейронной сети использовать для распознавания? Сколько слоев нейронов и какая должна быть структура
кроссвалидацией подбираешь.

Цитата:
2. Возможно ли с помощью нс чистить изображения от шумов?
да, они работают с шумом. главное не забудь чтобы в обучающей выборке тоже был репрезентативный шум.

Цитата:
3. Где можно почитать хорошенько по данной теме но не строго мат.текст
на русском точно скажу что нигде. везде вода

Цитата:
4. После обучения сеть ищет похожие символы или сверяется с образцом из базы обучения? Я понимая что логика там нечеткая,но не совсем ясно как сеть понимает к какому ответу ближе входной сигнал
да никто не понимает, это черный ящик, в этом один из минусов нейросетевых моделей
  #3  
Старый 16.11.2010, 18:50
Новичок

Отправить личное сообщение для R1der Посмотреть профиль Найти все сообщения от R1der
 
Регистрация: 16.11.2010
Сообщений: 6

метод векторов мне менее удобен, да и математики там больше, и заинтересовал именно потенциал нейронок.

Вы уверены что на русском ничего неТ?
  #4  
Старый 16.11.2010, 19:18
гость

 
Сообщений: n/a

Сообщение от R1der Посмотреть сообщение
метод векторов мне менее удобен, да и математики там больше
а зачем вам с нуля его реализовывать? есть куча готовых и отлаженных пакетов в которых вся математика уже внутри.

Цитата:
и заинтересовал именно потенциал нейронок.
у вас задача как стоит? "чтобы хорошо работало" или "чтобы работало на нейросетях"?
  #5  
Старый 16.11.2010, 19:28
гость

 
Сообщений: n/a

Да и в любом случае, ваша задача не ограничивается методом обучения. Сначала вам нужно обучающую выборку собрать и научиться сегментировать изображение на отдельные буквы. Думаю, это займет бОльшую часть работы.
  #6  
Старый 16.11.2010, 22:40
Новичок

Отправить личное сообщение для R1der Посмотреть профиль Найти все сообщения от R1der
 
Регистрация: 16.11.2010
Сообщений: 6

скажем так, сегментировать это не проблема, привести к определенному виду тоже, хотя конечно интересно, как привести к матрице пикселей положим тоже разберусь. меня заинтересовали именно алгоритмы нейронных сетей.
читаю информаию тут: http://algolist.manual.ru/ai/neuro/index.php
книги осовский нейронные сети и обработка информации
хайкин нейронные сети полный курс (ниче не понимаю, математика сплошная, точне понимаю, хотелось бы видеть реализацию)
программирование искусственного интелекта в приложениях (много того что касается не нейронных сетей)

Я знаю что есть материал для программистов по этой теме на русском языке, помогите мне найти его, меня интересуют также вопросы сегментирования, удаления шумов, способов обучения, вообще все что может пригодится в поставленной мной задаче.
Спасибо еще раз.
  #7  
Старый 16.11.2010, 23:19
гость

 
Сообщений: n/a

Возьмите для начала готовый софт, libsvm или fann (http://leenissen.dk/fann/), если уж так хочется чтобы было нейро-. Скормите ей свой набор данных, аккуратно подберите параметры кроссвалидацией и посмотрите на результат. Чтобы было хоть с чем сравниваться.

А потом пишите своё. Вот тут результаты сравнения разных алгоритмов для распознавания рукописных цифр http://yann.lecun.com/exdb/mnist/. Последний писк нейромоды, как видите - convolutional сети от Яна Лекуна и их производные.
  #8  
Старый 17.11.2010, 01:05
Новичок

Отправить личное сообщение для R1der Посмотреть профиль Найти все сообщения от R1der
 
Регистрация: 16.11.2010
Сообщений: 6

да библиотеку юзаю, велосипед конечно же изобретать не стал.
Вопросы которые пока остаются непонятыми
1. как построить архитектуру сети. Есть английский алфавит + цифры, есть обучающая выборка MNIST, определенного формата.
Один нейрон или дин слой должен отвечать за распознавание буквы?
2. При обучении ведь изменяется всего один параметр - вес,а если делать выборки подряд? не "забудет" ли сеть предыдущие прогоны? То есть раз вес постоянно изменяется затачиваясь под определенную выборку, каким образом она будет возвращать нужный выходной сигнал для всех выборок?
3. Если мы передаем сети букву, но такое написание сеть еще не знает, то есть она не была обучена на эту выборку, какой тогда у нее алгоритм определения буквы или цифры?
4. Какие следуют использовать функции активации в сети? Сигмидальную, чтобы можно было расчитать вероятности, ведь она возвращает вещественнео число в диапозоне -1 - 1?
Прошу ответьте по пунктам, просто ваш ответ часто затрагивает только один из предложенных мною пунктов, редко 2.
  #9  
Старый 17.11.2010, 03:34
гость

 
Сообщений: n/a

Цитата:
1. как построить архитектуру сети. Есть английский алфавит + цифры, есть обучающая выборка MNIST, определенного формата. Один нейрон или дин слой должен отвечать за распознавание буквы?
В задаче многоклассовой классификации (у тебя M=36 классов, буквы и цифры), в нейросетях обычно строится сеть, в который M выходных нейронов, по одному на класс. А все остальные слои у них общие. Выход i-го нейрона интерпретируется как уверенность в этом классе.

В каком классе сеть наиболее уверенна, тот и принимаешь за ее ответ. А во время обучения наоборот - тебе надо преобразовать известную метку класса в желаемое значение "уверенности" для каждого выходного нейрона; можно так: подаешь на выход правильного нейрона, скажем, +1, а на выход всех остальных - ноль, или -1. Впрочем, если пользуешь готовый софт, то это он должен уметь делать сам.

Цитата:
2. При обучении ведь изменяется всего один параметр - вес
не один. их много

Цитата:
,а если делать выборки подряд? не "забудет" ли сеть предыдущие прогоны?
Не совсем понял, что значит "делать выборки подряд"?

Процесс обучения такой. Вы предъявляете сети пример: вход - правильный выход, считаете градиент методом обратного распространения ошибки, и делаете шаг градиентного спуска. Затем то же самое для другого примера, и т.д. в цикле, пока куда-нибудь оно всё не сойдётся, или не надоест.

Действительно, вскоре после выучивания некоторого примера, сеть вполне может его "забыть" (т.е. снова делать на нем ошибку). Это нормально. Нас же волнует не ошибка на каком-то отдельном примере, а сколько в среднем делается ошибок. Ноль ошибок на обучении вполне может быть и не достигнуто, причем это даже типичная ситуация. И чем больше шума, тем больше следует ожидать ошибок.

Цитата:
То есть раз вес постоянно изменяется затачиваясь под определенную выборку, каким образом она будет возвращать нужный выходной сигнал для всех выборок?

3. Если мы передаем сети букву, но такое написание сеть еще не знает, то есть она не была обучена на эту выборку, какой тогда у нее алгоритм определения буквы или цифры?
Правильный вопрос! "А почему оно учится?". Фундаментальный вопрос всей нашей дисциплины о машинном обучении.

Действительно, сеть вполне может просто слишком сильно затачиваться под обучающую выборку, запоминая все ее особенности. И обычно, чем больше нейронов, чем больше слоев, чем больше итераций обучения прошло, тем сильнее она это делает. Явление называется http://en.wikipedia.org/wiki/Overfitting. На второй картинке по ссылке изображена типичная ситуация - с ростом сложности модели вначале процент ошибок уменьшается и на обучающей выборки, и "вообще". Затем ошибка "вообще" проходит минимум, и начинает снова возрастать, т.к. сеть слишком сильно подсела на обучающую выборку. Основная задача - подловить этот минимум, например, кроссвалидацией, см. ниже.

Цитата:
4. Какие следуют использовать функции активации в сети? Сигмидальную, чтобы можно было расчитать вероятности, ведь она возвращает вещественнео число в диапозоне -1 - 1?
А зачем вам на выходе обязательно вероятности? От обычных действительных чисел от -oo до oo максимум тоже прекрасно берется, а больше и не нужно.

Какую функцию брать. Вот тут хорошая статья и дается несколько практических советов - http://www.codeproject.com/KB/librar...cognition.aspx

Но вообще, какую функцию брать, какую архитектуру брать, сколько слоев и нейронов и т.п. - это всё из одной и той же оперы. Model selection называется. Ответ дает кроссвалидация.

Перебираете варианты функций, архитектур, слоев, нейронов и т.п. (гиперпараметры одним словом). Для каждого варианта считаете кроссвалидационную ошибку (CV error) так. Делите исходную обучающую выборку на K частей (K=5 или 10 обычно), K раз проводите обучение с выбранными параметрам, на i-м разе в качестве обучающей выборке берете все K-1 частей, кроме i-й, обучаетесь, считаете ошибку на i-й части. В конце усредняете ошибки, и вуаля - получаете CV error, которая примерно говорит сколько ошибок эта модель сделает на не новых, не увиденных ей при обучении, данных. Подбираете гиперпараметры так, чтобы минимизировать CV error.
  #10  
Старый 17.11.2010, 03:37
гость

 
Сообщений: n/a

Сообщение от гость Посмотреть сообщение
на не новых
*на новых
 


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JPEG или VELVET сжатие изображений Arty Реализация, исходники, языки 3 20.04.2010 13:01
оценка сжатия изображений Мари Обработка изображений, звук, графика 0 04.04.2010 12:54
обработка изображений на delphi гость Реализация, исходники, языки 1 17.05.2009 21:02
Алгоритмы шумов для изображений pretorian Реализация, исходники, языки 1 09.05.2008 14:14
Инженер по обработке изображений. Алексей Минаков Работа 2 21.01.2008 11:06