Pull to refresh

Comments 30

Интересная вещь, не часто встретишь нейросеть на ++
Да и еще и написано чисто и понятно. Тоже большая редкость для ++
Почти все современные библиотеки для DL написаны на C++. Но я вроде встречал и С однажды.
А все ядро (линейная алгебра) — на фортране. И что? Там пирог слоев, и пользуют все питон почему-то…

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

Не просто ресерч. Питон не просто оббертка, там много доп. логики реализовано. Так то можно и С назвать обберткой над фортрановской либой просто.

Вы просто не в теме.
Самый популярный tensorflow, внезапно, написан на C++
Следующий по популярности Caffe написан на C++
PyTorch, ой, внезапно тоже C++. Как же так?
И далее:
https://github.com/tiny-dnn/tiny-dnn
https://github.com/josephmisiti/awesome-machine-learning#general-purpose-machine-learning-2


А вы думали, всё на Python пишут? :) Нет, только интерфейсные обертки для удобного применения, прототипирования, визуализации и т. д.

Из серии «а ядро все на фортране». Понятно что не на питоне, только вот человеческий облик только у питоновских обберток. И таки да, вы удивитесь, но все пользуют именно питоновские оббертки, а не фортран и С напрямую.
Интересная библиотечка, нужно будет посмотреть, попробовать.

А сеть сам писал или это всё есть в openBLAS? Тот же вопрос по CUDA и т.п. — сам или всё есть openBLAS?

У меня тоже есть небольшая библиотечка — актуальна была, лет 10 назад, когда не было CUDA, был однопоток и т.п. Но мне она интересна наличием в ней быстрого CCG алгоритма и GA, в котором ошибка на тестовой выборке меньше, чем на обучающей. Как можно разпараллелить обучение, перевести на CUDA и т.д.? Можешь что-то посоветовать.
OpenBLAS — это всего лишь BLAS. Несколько десятков операций линейной алгебры, для операций между векторами и матрицами.

CUDA — предоставляет свою имплементацию BLAS — cuBLAS, плюс предоставляет приличный набор примитивов для построения нейросетей — cuDNN.
на CPU и CUDA алгоритмы свои, cuDNN дает готовую реализацию. Как ниже указали «OpenBLAS — это всего лишь BLAS».
Как можно разпараллелить обучен...

от задачи плясать надо. с мануала CUDA начать, дальше примеров в сети масса.
Cравнение с «PyTorch» на примере MNIST:

PyTorch: Accuracy: 98%, Time: 140 sec
SkyNet: Accuracy: 95%, Time: 150 sec

Т.е. работает хуже и медленнее?

В коде указанном в статье не упоминается нигде важнейший аспект — изначальное распределение весов. А это — один из важнейших аспектов все-таки. Возможно разница в accuracy этим объясняется.
для инициализации весов — есть параметр, там все современные алгоритмы распределения.
по умолчанию «He»
Тест на адекватность расчета, не было цели догнать и перегнать. Математика везде та же самая, все дело в деталях — веса, слои, функция ошибки, аугментация данных и тд
Неплохо было бы уменьшить разницу, чтобы убедиться что проблема была именно в аугментациях. 3% на MNIST это очень много.
То есть вы сравнивали сети не с равными параметрами и настройками обучения?
Тогда это сравнение не даёт особой информации.
Попробуйте воспроизвести одну и ту же архитектуру один-в-один в PyTorch / TensorFlow и в вашей библиотеке. Вот такое сравнение было бы интересным.
Стою на траве я в лыжи обутый, то ли лето пришло, то ли я.
Точно, я.
А автору жирый лайкище!
Интересная штука. Только недавно искал библиотеки по нейросетям, хоть и не для плюсов.

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

Так в том-то и дело, что в оббертках куча логики, без которой плюсовые либы не юзабельны для современных практических задач, оттого и мнение такое сложилось.
немного не в этом дело.
логику самому можно написать, которой не хватает (подготовка изображений, автокорр-ка lrate и тд).
Имхо, на самом деле, проблема в том, что у современных ML библиотек интерфейс проектировался(и реализовался) сразу с учетом использования на Python (или на другой скрипт язык). Поэтому, извиняюсь, кишки торчат наружу, те любая внутренняя структура имеет внешний handler, вся внутренняя кухня — engine, optimizer, lossfunc… все болтается в h-ках, которых тоже куча получается, для каждой внутренней сущности.
Соответственно пользоваться нативно таким винегретом, не разработчику, тяжело.
Приходится смотреть внутрь. Теперь о том что внутри.
Внутри С++ во всей красе, те не ограничен ничем — шаблоны в куче с наследованием, структуры магически выводящие описание и типы своих данных, портянки комментов, о том как работает код, авторы будто сами понимают, что без этого комментария вообще никак и т.д.
А теперь почему так (имхо все продолжается, если что). Потому что пишут люди близкие к науке, не программисты. По хорошему, им надо писать методики для программистов. Если бы был хороший понятный код, не только для питона, то мало кто стал бы писать велики.

Да откуда вы это взяли?
Я использую нейросети на плюсах в ежедневной работе и нормально себя чувствую.
Разумеется, мы сейчас говорим об инференсе сетей, правда? Потому что если вы хотите обучать сети на плюсах, то вам стоит пересмотреть свои взгляды на мир.

нормально себя чувствую

поздравляю

говорим об инференсе сетей

по-русски можете говорить?

вам стоит пересмотреть свои взгляды на мир

спасибо за совет. учту.

по-русски можете говорить?

Я и говорю. Это общепринятая терминология, которую используют, например, такие лидеры индустрии, как Nvidia.

поздравляю

Ваш сарказм неуместен. Я же серьёзно пишу, что есть фреймворки глубокого обучения отлично работают на плюсах.
не спорю. может быть сейчас многое изменилось, обновления фр-ов выходят каждый квартал.
я использовал mxnet года 2 назад, на плюсах, и было тяжело.
главное, было не понятно, почему должен использовать python, когда либа написана на плюсах.
Во-первых, mxnet — в целом не самый лучший фреймворк.
Во-вторых, два года назад и на питоне многие deep learning фреймворки чувствовали себя не самым лучшим образом. TF был крайне нестабильным. Второй Keras вообще только вышел в основную ветке.
В-третьих, переадресую вам тот же вопрос, что и предыдущему комментатору: «Разумеется, мы сейчас говорим об инференсе сетей, правда?»
Разумеется, мы сейчас говорим об инференсе сетей, правда?

нет, на тот момент я думал как создавать и обучать сети именно на плюсах.
сейчас я уже так не думаю, овчинка выделки не стоит. на питоне в разы быстрее и проще.
Перспективы библиотеки конечно довольно туманны, ввиду огромного количества весьма достойных альтернатив. Однако она тоже полезна — лучший способ разобраться в методах машинного обучения — самому написать библиотечку для машинного обучения (проверено на себе). Так что удачи автору!
P.S. Сам достаточно длительное время посвятил оптимизациям прямого распространения сигнала в неросетях на CPU (проекты Simd и Synet). Если потребуется помощь — обращайтесь.
UFO just landed and posted this here
Sign up to leave a comment.

Articles