Подтвердить что ты не робот

Прототипирование нейронных сетей

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

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

Спасибо.

4b9b3361

Ответ 1

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

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

http://www.pythonxy.com/

http://code.enthought.com/

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

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

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

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

Вы упомянули 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 и немного С++ и немного R, то вы сможете тратить меньше времени на нейронные сети. Эта стратегия может быть хорошей для тех, кто хочет карьеру в программировании, но не для тех, кто хочет добиться значительных результатов в нейронных сетях.

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

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

Ответ 2

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

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

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

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

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

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

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

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

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

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

Ответ 6

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

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

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

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

Ответ 7

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

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

http://www.heatonresearch.com/encog

Ответ 8

В моих nn классах в школе мы использовали matlab, а затем я использовал java для моей диссертации.

Я бы предложил java или matlab. Matlab, потому что он, вероятно, уже имеет то, что вам может понадобиться. И java, потому что быстро реализовать то, что может отсутствовать в проектах с открытым исходным кодом. И кроме того, помимо внедрения нейронных сетей, вам может понадобиться какой-то способ визуализировать их. И для этого я лично считаю, что java или matlab довольно легко.

Ответ 9

Мне нравится flood. Он бесплатный, всеобъемлющий и написан на С++.

Ответ 10

Реализации в Matlab сложны и полны. Я нашел, что этого достаточно для оценки различных типов сетей. Он также очень программируется с использованием внешних интерфейсов.

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

Ответ 11

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

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

Возможно, мой опыт был бы лучше, если бы я использовал уже построенную матричную схему вычислений. Учитывая, что, как вы делаете 3D, для большинства языков должно быть несколько действительно оптимизированных библиотек. Например, вы можете использовать Direct3D или OpenGL для этого, но я уверен, что там есть что-то более подходящее для Neural Networks.

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

Ответ 12

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

Ответ 13

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

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

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

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

Ответ 15

Как правило, когда я возился с этими типами алгоритмов, я обнаружил, что использование

Ответ 16

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

Возможно, 5 лет назад я сделал решатель Sokoban, используя Укрепление обучения. В то время мы решили пойти с Java и использовать некоторую Agent Framework, разработанную итальянским университетом.

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

Как только мы дошли до того, что все было стабильно, тренировка Нейронной сети была просто мертвой. Мы оставили его на ночь на довольно мощной машине, и все же он решил очень мало головоломок. В основном выделение объектов Java и сборка мусора сильно ухудшали всю производительность системы. Мы немного изменили приложение, создав пулы объектов, а не выделяя их все время, но производительность программы по-прежнему на порядок меньше, чем аналогичное назначение, которое было реализовано на С++, используя сокеты напрямую.

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

Ответ 17

Хорошо, если вам нравится прототип быстро, тогда лучше всего использовать python или matlab. Для нейронных сетей доступно множество библиотек. Некоторые из библиотек разработаны таким образом, что они дают вам минимальный объем настройки, но библиотеки, такие как Theano, очень быстр, поскольку функция внутренне скомпилирована в C (я думаю, что самая быстрая дата), и она дает вам полную функциональность внутренних подстройка. Теано типично использовать сначала, но чрезвычайно мощно. И позже, если вы захотите перейти от нервного к глубокому нейрону, тогда нет большой разницы. Профессиональные Kagglers также имеют тенденцию использовать эту библиотеку. Эта библиотека также поддерживает GPU. Из всех библиотек, которые я использовал, я нашел, что theano является самым полезным и мощным. На анано разработаны некоторые другие современные системы глубокого обучения, такие как Caffe.

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

Ответ 18

Я реализовал несколько прототипов нейронных сетей в Java и C/С++. Когда важна производительность, используйте с C/С++.

Одна из моих реализаций (не векторизованная) базового многослойного Perceptron делает миллион тренировочных итераций (с настройкой 2-х входов, 4 скрытых и 1 вывода node) менее чем за минуту. Моя почти идентичная реализация на Java требует огромного времени для этого. Вы также можете использовать библиотеку линейной алгебры, такую ​​как Eigen, для создания векторизованной версии для улучшения скорости обработки.

Представьте, что вы использовали бы вашу продукцию для любой обработки изображений (Face-Recognition, OCR и т.д.), например, с изображениями размером 28x28 пикселей. У вас будет 784 единицы ввода и, по крайней мере, столько скрытых единиц. Это требует огромного количества времени для обучения, поэтому полезно экономить драгоценные минуты, часы или дни.