- PVSM.RU - https://www.pvsm.ru -
Представляем вам перевод серии статей посвященных глубокому обучению. В первой части описан выбор фреймворка с отрытым кодом для символьного глубокого обучения, между MXNET, TensorFlow, Theano. Автор подробно сравнивает преимущества и недостатки каждого из них. В следующих частях вы узнаете о тонкой настройке глубоких сверточных сетей, а также о сочетании глубокой сверточной нейронной сети с рекуррентной нейронной сетью.
1. Сравнение фреймворков для символьного глубокого обучения [1].
2. Transfer learning и тонкая настройка глубоких сверточных нейронных сетей.
3. Cочетание глубокой сверточной нейронной сети с рекуррентной нейронной сетью.
Примечание: далее повествование будет вестись от имени автора.
Фреймворки для символьных вычислений (MXNET [2], TensorFlow [3], Theano [4]) характеризуются символьными графами векторных операций, таких как матричное сложение/умножение или свертка. Слой является просто набором таких операций. Благодаря разделению на небольшие составные компоненты (операции) пользователи могут создавать новые сложные типы слоев без использования низкоуровневых языков (как в Caffe [5]).
У меня есть опыт использования различных фреймворков для символьных вычислений. Как оказалось, в устройстве и текущей реализации у них у всех есть как преимущества, так и недостатки, но ни один из них не отвечает в полной мере всем требованиям. Однако в данный момент я отдаю предпочтение Theano.
Далее мы сравним перечисленные фреймворки для символьных вычислений.
Характеристика |
Theano |
TensorFlow |
MXNET |
---|---|---|---|
Программное обеспечение | Theano | TensorFlow | MXNET |
Автор | Монреальский университет | Команда Google Brain | Сообщество Distributed (Deep) Machine Learning Community |
Лицензия на программное обеспечение | Лицензия BSD | Apache 2.0 | Apache 2.0 |
Открытый исходный код | Да | Да | Да |
Платформа | Кросс-платформенное решение | Linux, Mac OS X, планируется поддержка Windows | Ubuntu, OS X, Windows, AWS, Android, iOS, JavaScript |
Язык программирования | Python | C++, Python | C++, Python, Julia, Matlab, R, Scala |
Интерфейс | Python | C/C++, Python | C++, Python, Julia, Matlab, JavaScript, R, Scala |
Поддержка CUDA | Да | Да | Да |
Автоматическое дифференцирование | Да | Да | Да |
Наличие предварительно обученных моделей | С помощью model zoo в Lasagne | Нет | Да |
Рекуррентные сети | Да | Да | Да |
Сверточные сети | Да | Да | Да |
Ограниченные машины Больцмана/глубокие сети доверия | Да | Да | Да |
Преимущества:
Недостатки:
Преимущества:
Недостатки:
Во всех этих фреймворках добавление операций с сохранением приемлемой производительности весьма непросто.
Theano/MXNET | TensorFlow |
---|---|
Можно добавлять операции на Python с поддержкой встроенных операторов C. | Forward на C++, symbolic gradient на Python. |
Для обучения глубоких сетей требуется немало времени. Поэтому Caffe выпустили несколько заранее обученных моделей (model zoo), которые можно было бы использовать в качестве изначальных образцов при передаче обучения или при тонкой настройке глубоких сетей для определенных областей знаний или пользовательских образов.
Theano | TensorFlow | MXNET |
---|---|---|
Lasagne — высокоуровневая платформа на основе Theano. В Lasagne очень просто использовать заранее обученные модели Caffe | Нет поддержки заранее обученных моделей | В MXNET предусмотрен инструмент caffe_converter [10], предназначенный для преобразования заранее обученных моделей caffe в формат MXNET |
Достаточно эффективная реализация низкоуровневых операторов: их можно использовать в качестве составных компонентов при создании новых моделей, не затрачивая усилия на написание новых операторов.
Theano | TensorFlow | MXNET |
---|---|---|
Множество простых операций | Вполне хорошо | Очень мало |
Операторы управления потоком повышают выразительность и универсальность символьной системы.
Theano | TensorFlow | MXNET |
---|---|---|
Поддерживаются | В формате эксперимента | Не поддерживаются |
Theano | TensorFlow | MXNET |
---|---|---|
«Чистый» символьный вычислительный фреймворк. Можно создавать высокоуровневые платформы в соответствии с требованиями. Среди успешных примеров — Keras [11], Lasagne [12], blocks [13] | Неплохое устройство с точки зрения обучения нейронных сетей, но при этом данный фреймворк не ориентирован исключительно на нейронные сети, что очень хорошо. Можно использовать коллекции графов, очереди и дополнения образов в качестве составных компонентов для высокоуровневых оболочек | Помимо символьной части, в MXNET также предусмотрены все необходимые компоненты [14] для классификации образов, от загрузки данных до построения моделей с методами для начала обучения. |
В моих тестах производительность модели LeNet для набора данных MNIST измерена для конфигурации с одним графическим процессором (GPU NVIDIA Quadro K1200).
Theano | TensorFlow | MXNET |
---|---|---|
Отлично | Средне | Превосходно |
Объем памяти GPU ограничен, поэтому использование для больших моделей может быть проблематично.
Theano | TensorFlow | MXNET |
---|---|---|
Отлично | Средне | Превосходно |
Theano очень долго компилирует графы, особенно в сложных моделях. TensorFlow еще немного медленнее.
Theano/MXNET | TensorFlow |
---|---|
Сравнимо с CuDNNv4 | Примерно вдвое медленнее |
Theano | TensorFlow | MXNET |
---|---|---|
Экспериментальная поддержка Multi-GPU | Multi-GPU | Распределенная |
Theano (с высокоуровневыми решениями Lasagne и Keras) — это отличный выбор для моделей глубокого обучения. С помощью Lasagne/Keras очень просто создавать новые сети и изменять существующие. Я предпочитаю Python, поэтому выбираю Lasagne/Keras благодаря очень развитому интерфейсу Python. Впрочем, эти решения не поддерживают R. Возможности передачи обучения и тонкой настройки в Lasagne/Keras показывают, что там очень просто модифицировать существующие сети, а также настраивать под предметно-ориентированные пользовательские данные.
После сравнения фреймворков можно сделать вывод, что самым оптимальным решением будет MXNET (более высокая производительность, эффективное использование памяти). Кроме того, в нем отличная поддержка R. Собственно говоря, это единственная платформа, в которой поддерживаются [15] все функции на R. В MXNET передача обучения и тонкая настройка сетей возможны, но выполнять их довольно сложно (по сравнению с Lasagne/Keras). Из-за этого будет сложно не только модифицировать существующие сети обучения, но и настраивать под предметно-ориентированные пользовательские данные.
Если вы увидели неточность перевода, сообщите пожалуйста об этом в личные сообщения.
Автор: Microsoft
Источник [16]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/202705
Ссылки в тексте:
[1] Сравнение фреймворков для символьного глубокого обучения: https://habrahabr.ru/company/microsoft/blog/313318/
[2] MXNET: https://github.com/dmlc/mxnet
[3] TensorFlow: https://www.tensorflow.org/
[4] Theano: https://github.com/Theano/Theano
[5] Caffe: http://caffe.berkeleyvision.org/
[6] torch: https://github.com/torch/
[7] caffe: https://github.com/BVLC/caffe/
[8] torch/nngraph: https://github.com/torch/nngraph
[9] здесь: http://download.tensorflow.org/paper/whitepaper2015.pdf
[10] caffe_converter: https://github.com/dmlc/mxnet/tree/master/tools/caffe_converter
[11] Keras: http://keras.io/
[12] Lasagne: http://lasagne.readthedocs.org/en/latest/
[13] blocks: http://blocks.readthedocs.org/en/latest/
[14] компоненты: https://github.com/dmlc/mxnet/tree/master/example/image-classification
[15] поддерживаются: http://dmlc.ml/rstats/2015/11/03/training-deep-net-with-R.html
[16] Источник: https://habrahabr.ru/post/313318/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.