Каков наилучший язык программирования для реализации нейронных сетей?

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

конечно, вы можете сделать это на C, C++, Java и co. но дело с нуля с многопоточностью и т. д. был бы кошмар.

на другом конце такие языки, как Oz или Erlang, кажутся более адаптированными, но у них не так много библиотек, и их сложнее освоить (с ними легко играть, но можно ли создать полное программное обеспечение ?).

Что бы вы предложили ?

10 ответов


Я смотрел интересную презентацию конференции об использовании Erlang для нейронных сетей. Вы можете проверить это:

от телекоммуникационных сетей до нейронных сетей; Erlang, как непреднамеренный язык программирования нейронных сетей

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


Erlang очень хорошо подходит для NN.

  1. нейроны могут быть смоделированы процессами (нет проблем с миллионами из них)
  2. соединения / синапсы могут быть представлены Пидами целевого нейрона. Инициализировать такую сеть в рамках стандартной процедуры init в OTP очень просто. Связь будет осуществляться путем передачи сообщений.
  3. возможно, было бы хорошо иметь глобальное адресное пространство в ETS / mnesia (build in datastores), чтобы делать динамические реконфигурация структуры сети.
  4. сопоставление шаблонов в блоке приема может определить, какой сигнал получает нейрон, и изменить его на лету.
  5. было бы очень легко контролировать такую сеть.

также учтите, что Erlang NN будет "жить" все время. Вы сможете запрашивать нейроны, слои, маршрутизаторы и т. д. В любое время. В C / C++ вы просто читаете текущее состояние массивов / структуры данных.

Что касается производительности, мы все знаем что C / C++ на порядок быстрее, чем Erlang, однако тема NN сложная.

Если сеть будет содержать очень мало нейронов, в очень широком адресном пространстве, в регулярном массиве, повторяя это снова и снова может быть дорогостоящим (в C). Эквивалентная ситуация в Erlang будет решена одним запросом к нейронам root/roots (input layer), которые будут распространять запрос непосредственно на хорошо адресованные соседи.


DXNN1, и DXNN2, которая была построена и введена в учебнике: справочник Neuroevolution через Эрланга: http://www.amazon.com/Handbook-Neuroevolution-Through-Erlang-Gene/dp/1461444624/ref=zg_bs_760204_22

открытым исходным кодом и доступна на сайте: https://github.com/CorticalComputer


Если вас интересует Программирование потоков данных и многопоточность, я бы предложил National Instruments LabVIEW. В этом случае вам не нужно беспокоиться о многопоточности, так как она уже есть, и вы также можете использовать ООП, так как теперь ООП также является родным с LabVIEW. LabVIEW OOP также чисто основан на парадигме программирования потока данных.


Если у вас есть опыт Java, используйте Scala, который является языком JVM, который основан на той же концепции "актеров", что и Erlang. Но он менее строгий, чем Erlang, и может легко использовать любые существующие библиотеки Java.

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


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


Это не язык сам по себе, но Emergent очень мощный и может быть сильно настроен (он имеет полный язык сценариев).

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


зачем изобретать велосипед? Попробуй!--1-->PyBrain. Это бесплатно и очень всеобъемлющим:


еще один большой плюс для Erlang-полная интеграция с Drakon

http://drakon-editor.sourceforge.net/drakon-erlang/intro.html


все зависит от вашего приложения. C++, Python - некоторые хорошие языки программирования для машинного обучения