Разработка прототипа нейронных сетей

Я настроил Eclipse для добавления финала на всех полях и атрибутах, которые не изменяются. Это работает использование отлично Eclipse, "сохраняют действия", который добавляет эти заключительные модификаторы (среди прочего), сохранив файл.

Наиболее рекомендуемый.

Выезд мое сообщение в блоге из Eclipse Сохраняют Действия.

23
задан lmsasu 4 December 2009 в 13:49
поделиться

14 ответов

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

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

http://www.pythonxy.com/

http://code.enoughtt.com/

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

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

Однако, если вы серьезно работаете с нейронными сетями, вам понадобится что-то вроде библиотеки Fast Neural Network. Он поставляется с привязками Python, так что вы можете программировать на Python, использовать широкий спектр модулей Python для построения графиков, визуализации, манипулирования данными и так далее. Но ваши нейронные сети будут работать с использованием оптимизированного скомпилированного кода из библиотеки 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, немного с C ++ и немного с R, вы сможете тратить меньше времени на нейронные сети. Эта стратегия может быть хороша для тех, кто хочет сделать карьеру в программировании, но не для тех, кто хочет добиться значительных результатов с помощью нейронных сетей.

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

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

27
ответ дан 29 November 2019 в 00:49
поделиться

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

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

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

8
ответ дан 29 November 2019 в 00:49
поделиться

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

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

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

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

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

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

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

9
ответ дан 29 November 2019 в 00:49
поделиться

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

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

1
ответ дан 29 November 2019 в 00:49
поделиться

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

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

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

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

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

1
ответ дан 29 November 2019 в 00:49
поделиться

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

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

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

2
ответ дан 29 November 2019 в 00:49
поделиться

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

2
ответ дан 29 November 2019 в 00:49
поделиться

I have started writing a NN implementation using C++ and found that I didn't know enough about the maths involved in the beginning. What ended up hapenning was that it was too hard to refactor the code as I was tweaking the calculation model.

Eventually I gave into MATLAB as it was definitely a better companion to learning how neural networks work. I was able to make huge changes to the algorithm using a few key strokes and graph the results too.

Perhaps my experience would have been better if I had used an already built matrix computation framework. Considering that's how you do 3D there should be a few really optimized libraries out there for most languages. Heck you might as well leverage Direct3D or OpenGL for that, but I am sure there is something more suitable for Neural Networks out there.

I guess I am not providing much information on what you should do. I can however tell what you should not do - and that's trying to write matrix manipulation code yourself.

2
ответ дан 29 November 2019 в 00:49
поделиться

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

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

2
ответ дан 29 November 2019 в 00:49
поделиться

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

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

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

5
ответ дан 29 November 2019 в 00:49
поделиться

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

6
ответ дан 29 November 2019 в 00:49
поделиться

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

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

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

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

3
ответ дан 29 November 2019 в 00:49
поделиться

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

2
ответ дан 29 November 2019 в 00:49
поделиться

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

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

2
ответ дан 29 November 2019 в 00:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: