Каков наилучший язык программирования для реализации нейронных сетей?
Я не ищу библиотеку нейронных сетей, так как я создаю новые виды сетей. Для этого мне нужен хороший язык "потока данных".
конечно, вы можете сделать это на C, C++, Java и co. но дело с нуля с многопоточностью и т. д. был бы кошмар.
на другом конце такие языки, как Oz или Erlang, кажутся более адаптированными, но у них не так много библиотек, и их сложнее освоить (с ними легко играть, но можно ли создать полное программное обеспечение ?).
Что бы вы предложили ?
10 ответов
Я смотрел интересную презентацию конференции об использовании Erlang для нейронных сетей. Вы можете проверить это:
Я также знаю, что представленная система будет открыта в любой день в соответствии с авторы чирикать.
Erlang очень хорошо подходит для NN.
- нейроны могут быть смоделированы процессами (нет проблем с миллионами из них)
- соединения / синапсы могут быть представлены Пидами целевого нейрона. Инициализировать такую сеть в рамках стандартной процедуры init в OTP очень просто. Связь будет осуществляться путем передачи сообщений.
- возможно, было бы хорошо иметь глобальное адресное пространство в ETS / mnesia (build in datastores), чтобы делать динамические реконфигурация структуры сети.
- сопоставление шаблонов в блоке приема может определить, какой сигнал получает нейрон, и изменить его на лету.
- было бы очень легко контролировать такую сеть.
также учтите, что 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 очень мощный и может быть сильно настроен (он имеет полный язык сценариев).
это с открытым исходным кодом, тоже, что может быть полезно в качестве руководства, если вам нужно сделать свою собственную версию для ваших новых архитектур.
еще один большой плюс для Erlang-полная интеграция с Drakon
http://drakon-editor.sourceforge.net/drakon-erlang/intro.html
все зависит от вашего приложения. C++, Python - некоторые хорошие языки программирования для машинного обучения