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

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

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

Спасибо.

Ответы [ 18 ]

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

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

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

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

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

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

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

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

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

Мне нравится флуд . Это бесплатно, полно и написано на C ++.

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

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

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

1 голос
/ 19 марта 2015

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

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

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

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

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

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

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

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

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

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

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

0 голосов
/ 30 мая 2016

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

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

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

...