Прототипирование нейронных сетей - PullRequest
23 голосов
/ 04 декабря 2009

из вашего опыта, какой самый эффективный подход для реализации прототипов искусственных нейронных сетей? Это много шумихи по поводу R (бесплатно, но я не работал с ним) или Matlab (не бесплатно), другой возможный выбор - использовать язык, такой как C ++ / Java / C #. Вопрос в основном нацелен на людей, которые пытались протестировать некоторые архитектуры нейронных сетей или алгоритмы обучения.

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

Спасибо.

Ответы [ 18 ]

27 голосов
/ 10 декабря 2009

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

Python - разумный выбор, поскольку он широко используется учеными. Начнем с двух дистрибутивов:

http://www.pythonxy.com/

http://code.enthought.com/

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

http://pypi.python.org/pypi?:action=search&term=neural&submit=search

Однако, если вы серьезно работаете с нейронными сетями, вам понадобится что-то вроде библиотеки быстрой нейронной сети. Это идет с привязками Python, так что вы можете заниматься программированием на Python, использовать широкий спектр модулей Python для построения графиков, визуализации, манипулирования данными и так далее. Но ваши нейронные сети будут работать с использованием оптимизированного скомпилированного кода из библиотеки FANN. Лучшее из обоих миров.

Другими словами, для запуска реального кода нейронной сети вам нужен C, а не Java. Поскольку библиотеки C плохо интегрируются с Java, выберите язык, который плавно интегрируется с библиотеками C. Python делает это и также является более продуктивным, чем Java, поскольку для объяснения ваших алгоритмов требуется намного меньше строк кода. Некоторые люди обнаружили, что производительность Java выросла в 10 раз.

Вы упомянули R, возможно, потому, что у него есть статистические функции, которые вам нужно использовать, или, возможно, у вас есть люди, которые могут написать код R. Опять же, выбор Python против R не является решением или. Вы можете использовать оба.

Библиотека RPY позволяет программам на Python получать доступ к библиотекам и коду R. Используя это, вы пишете свои основные программы на Python и рассматриваете R как инструмент для предоставления библиотек так же, как вы используете библиотеку FANN, написанную на C.

http://rpy.sourceforge.net/

Существует еще один модуль под названием RSPython, который работает в обоих направлениях, так что R-программы могут получать доступ к библиотекам, написанным на Python. Это было бы полезно, если бы вам помогал программист-эксперт R.

http://www.omegahat.org/RSPython/

И это еще не все. Вы можете использовать Python для упрощения программирования на Java. Если у вас есть движок нейронной сети Java, вы все равно можете написать большую часть своей программы на Python, используя версию Jython, которая работает на виртуальной машине Java и позволяет использовать любые библиотеки и классы Java в вашем коде. И вы все еще можете использовать быструю библиотеку FANN, поскольку они предоставляют привязки для программ на Java.

Основная причина, по которой я рекомендую Python для вашей работы, заключается в том, что он используется очень большим количеством ученых, поэтому доступны два научно-ориентированных дистрибутива. Вторая причина заключается в том, что начинающим программистам очень легко начать работу с Python, и при изучении нейронных сетей вы, вероятно, начнете с более простых симуляций и перейдете к более сложным с большим количеством операций с данными и анализа результатов. Python позволит вам создать свою собственную библиотеку кода и стать опытным программистом Python, чтобы вы могли сосредоточить больше внимания на проблемах нейронной сети. Если вы подпрыгиваете с небольшим количеством Java, немного C ++ и немного R, то вы сможете тратить меньше времени на нейронные сети. Эта стратегия может быть полезна для тех, кто хочет сделать карьеру в программировании, но не для тех, кто хочет добиться значительных результатов с помощью нейронных сетей.

Даже если ваша работа с нейронными сетями распространяется на специализированное аппаратное обеспечение, так называемые нейроморфные чипы, вы все равно можете использовать Python, как показано в этой статье из NIH:

http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2701676/

10 голосов
/ 09 декабря 2009

Я пытался использовать языки как с более высокой абстракцией (matlab, java), так и с более низкими (C). И с помощью наборов инструментов и библиотек, и сам их кодирую. Общий ответ? Ни один не идеальный инструмент. Пожалуйста, имейте в виду, что:

  • прототипа может быть недостаточно: часто вам нужно запустить сеть на больших выборках или несколько раз на подмножестве выборок (в случае развивающихся нейронных сетей), чтобы получить достойные результаты. Если вам приходится запускать сеть миллион раз, даже небольшой выигрыш в производительности может значительно помочь и сэкономить время (то есть C по сравнению с Matlab);

  • если, с другой стороны, вам нужна простота кодирования, вы можете использовать одну из множества предварительно упакованных библиотек (javaNN и т. Д.);

  • Какую нейронную сеть вы используете? непрерывные периодические нейронные сети (CTRNN)? Backprop? Как ты их тренируешь? Как вы проверяете их результаты? Важна ли точность? (т.е. вы запускаете их на маленьком устройстве, таком как роботизированная плата управления с ограниченной памятью, например Arduinos?)

Если у вас есть свободное время, я бы предложил

  1. изучите понятия, используя язык более высокого уровня или даже псевдокод;
  2. как только вы ознакомитесь со всеми тонкостями, особенно если используете развивающиеся нейронные сети, выберите язык, с которым они уже знакомы
  3. тогда вы можете начать исследовать, как оптимизировать скорость, объем памяти и т. Д.

Надеюсь, это поможет.

8 голосов
/ 06 декабря 2009

Я в некоторой степени использовал набор инструментов Matralb Neural network и использовал его в качестве инструмента для создания прототипов благодаря графическому интерфейсу, позволяющему настроить сеть, поэкспериментировать с размерами тренинга и тестовыми входными данными, а также после него. тренировочные тесты все встроенные. Просто было приятно и естественно начать с ...

Я также экспериментировал с Joone (Java Object Oriented Neural Engine). Он настроен довольно хорошо, и в то время я был немного любителем и все еще не испытывал проблем с настройкой и запуском различных сетей с тестированием. Это Java, поэтому она может не иметь такой производительности, которую вы могли бы ожидать, если вы обучаете большие сложные системы, но ее API был чрезвычайно доступен.

Я также видел некоторую работу, проделанную с Flood в C ++. Он имеет несколько классов, настроенных для сетей, которые подходят для решения целого ряда проблем. Это стоит проверить.

6 голосов
/ 12 декабря 2009

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

Кроме того, если вы используете python, вы также можете воспользоваться превосходным пакетом PyBrain , который содержит алгоритмы для нейронных сетей, обучение с подкреплением, обучение без учителя и другие задачи машинного обучения, которые должны помочь построй прототип быстро.

5 голосов
/ 11 декабря 2009

Это зависит от вашей текущей настройки. Когда я работал над ними еще в студенческие годы, мне приходилось использовать числовые рецепты C ++ + MPI +. Это было сделано потому, что мне пришлось загружать общий ресурс на большом кластере beowulf.

Если ваши потребности в вычислениях не велики, все подойдет. Предварительно упакованные библиотеки доступны на всех платформах (R, Python (numPy, scipy), C / C ++ (Числовые рецепты) и т. Д.). Если вам удобно программировать на любом из них, это не должно иметь большого значения.

Если бы мне пришлось что-то прототипировать сейчас, я бы, вероятно, выбрал Python (просто потому, что мне гораздо проще создавать прототипы)

3 голосов
/ 14 января 2011

"Encog - это усовершенствованная инфраструктура нейронных сетей и машинного обучения. Encog содержит классы для создания широкого спектра сетей, а также поддерживает классы для нормализации и обработки данных для этих нейронных сетей. Encog обучается с использованием многопоточного упругого распространения. также использовать графический процессор для увеличения скорости обработки. Также имеется инструментальные средства на основе графического интерфейса для моделирования и обучения нейронных сетей. Encog активно разрабатывается с 2008 года. "

Encog доступен для Java, C # .Net и Silverlight.

http://www.heatonresearch.com/encog

3 голосов
/ 10 декабря 2009

Scilab - альтернатива Matlab с открытым исходным кодом.

Вы можете поэкспериментировать с нейронными сетями, используя ANN Toolbox для Scilab .

Фокус на теории и экспериментах. Вы выбрали дискриминантные характеристики для своих образцов? Каково состояние ваших тренировочных и тестовых наборов? Для каждого эксперимента изучите путаницу. У вас есть идея, почему образец неправильно классифицирован? Вам это кажется логичным? Если нет, какая функция не используется?

Реализация идет дальше, используйте язык, с которым вы знакомы. Управляемый язык, такой как Java или C #, вероятно, будет менее подвержен ошибкам: по крайней мере, у вас меньше шансов испортить ситуацию из-за ошибок указателя или выделения памяти. Оптимизация идет последней (после некоторого приличного профилирования, как всегда).

2 голосов
/ 28 февраля 2012

Вы также можете попробовать Nen - это бесплатно, , просто в использовании и очень легкий. Он также превосходит LIBSVM по сравнению со стандартным сравнением по многим популярным наборам регрессионных и классификационных данных.

2 голосов
/ 12 декабря 2009

На мой взгляд, при работе с нейронными сетями ключевой момент заключается в том, чтобы правильно настроить обучающий набор не столько, сколько сама сеть реализована в коде. Я бы выбрал язык в зависимости от типа проблемы, которую вы пытаетесь решить с помощью сети. Для самой сети жизнеспособны c ++, c #, python и java.

Используете ли вы это в связи с проблемой, требующей обработки изображения? В этом случае вы, вероятно, захотите что-то, что легко подключается к библиотеке обработки изображений, такой как OpenCV. Или есть какая-то обработка звука?

Возможно, вам понадобится легко визуализировать тренировочные наборы, насколько легко это будет с выбранным языком? Можете ли вы работать с библиотеками OpenGL или DirectX напрямую или с помощью какой-либо оболочки? Для DirectX возможны варианты C ++ и C #. Будет ли более высокий уровень абстракции, скажем, работать с WPF?

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

2 голосов
/ 12 декабря 2009

Возможно, вы захотите взглянуть на Weka . Он имеет несколько встроенных инструментов для таких вещей, как визуализация данных, и существует уже несколько лет ( некоторые скриншоты ).

...