С чего начать рукописное распознавание с использованием нейронной сети?

Я пытался узнать о Neural Networks некоторое время, и я могу понять некоторые базовые обучающие онлайн. Теперь я хочу разработать онлайн-рукописное распознавание с помощью Neural Network. Поэтому я не знаю, с чего начать? И мне нужна очень хорошая инструкция. В конце концов я java-программист.

Что вы предлагаете мне делать?

Ответ 1

Начните с простого распознавания символов в Unipen.

Вам нужно будет извлечь соответствующие функции из необработанных данных траектории, чтобы сформировать так называемый "вектор функций". Например, вы можете перепрограммировать данные с использованием схемы интерполяции, чтобы в итоге было n кортежей, каждый кортеж содержал такую ​​информацию, как:

  • Позиция
  • ориентации
  • скорость
  • ускорение
  • кривизна
  • и т.д.

Когда у вас есть вектор с фиксированным размером, вы используете его в качестве входа в свою нейронную сеть. Попробуйте сети MLP для начала.

Вам нужно будет поэкспериментировать, чтобы решить, какие функции лучше всего.

Если вам нужно приступить к извлечению функций из данных чернил, посмотрите HP Lipi Toolkit (обратите внимание, что их распознаватели не использовать нейронные сети, хотя).

Вы также можете ознакомиться с этим 15 шагов по внедрению учебника по нейронной сети.

Ответ 3

Посмотрите на какой-то проект, плавающий по сети:

Чтобы перечислить только три первых ссылки, Google выплевывает " распознавание рукописного ввода java"

Некоторые подсказки, которые помогут вам начать:

  • Если вы можете, работайте с векторами, а не с растровой графикой. В идеале вы должны иметь скорость и направление каждого удара. Часто проще распознать букву, в которой кривая изгибается, и скорость, с которой она была нарисована, вместо формы.

  • Атакуйте проблему несколькими подходами. Используйте нейронные сети, распознавание формы, размер, предыдущую и следующую букву, словари. Все они дадут вам разные результаты с разными уровнями ошибок. Это может помочь значительно улучшить результаты.

Удачи!

Ответ 4

Питер Норвиг Искусственный интеллект: современный подход - хорошая книга об общем искусственном интеллекте, в которой многое объясняется об основах, а также есть раздел, посвященный нейронным сетям обратного распространения.

Для обучения вашей нейронной сети вам понадобятся наборы данных.

Там база данных MNIST рукописных цифр или набор данных распознавания рукописных цифр на основе пера в хранилище машинного обучения UCI

В хранилище UCI ML есть много отличных наборов данных, многие из которых были бы полезны для обучения нейронных сетей. Даже если вы не знаете, о чем они, вы можете взять их и посмотреть, сможет ли ваша система ML выполнить задачи классификации. Посмотрите на задачи классификации с большим количеством атрибутов и экземпляров, хотя вы можете попробовать и меньшие, когда начнете.

Между прочим, помимо нейронных сетей, существует гораздо больше техник, в том числе Support Vector Machines, которые популярны.

Ответ 5

Имейте в виду, что если ваша цель состоит в том, чтобы действительно распознать эти символы, ваша производительность будет стоять и падать на основе качества и выбора функций ввода.

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

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

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

Ответ 7

Нейронная сеть [если я не ошибаюсь] будет работать на интерпретации шаблонов, Вы предоставляете входные данные для своей программы, и программа выполняет поиск этого шаблона в наборе сохраненных шаблоны и на основе соответствия обеспечивают возможное совпадение.

В вашем случае размеры шаблонов могут быть такими данными, как скорость + направление или только направление и т.д.

Я сделал небольшую симуляцию нейронного бота, который чаты на моем сайте похожим образом.

Чем больше шаблонов программа "Learns", тем более точные ответы, которые она предоставляет.

Ответ 8

Нейронные сети нуждаются в большом времени выдержки. Концепции достаточно легкие, но они могут быть подавляющими для новичков.

Посмотрите, что сделал Йохен Фрёлих с нейронные сети в Java. Это звучит как идеальная отправная точка для Java-программиста, подобного вам.

Ответ 10

Если вы ищете концепции, я предлагаю BrainNet,

Neural Networks - часть I: простая система распознавания рукописного ввода в .NET

http://amazedsaint.blogspot.com/2008/01/neural-networks-part-i-simple.html

BrainNet поможет вам

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

Ответ 11

Я предлагаю вам начать с распознавания рукописных цифр по следующим причинам:

  • Задача четко определена
  • Там очень хорошая база данных рукописных цифр, упомянутых выше (MNIST)
  • В этой проблеме реализовано множество реализованных алгоритмов.
  • Одним из наиболее успешных подходов к этой проблеме является сверточные нейронные сети, которые даже использовались в коммерческих приложениях. Доступно несколько реализаций, включая С++, CUDA, Matlab, Python. К сожалению, я не знаю каких-либо реализаций Java.