Всем привет! Мне нравится учиться чему-то на практике, а также мне нравится объяснять вещи по ходу дела. Поэтому я решил создать новый DeepLeaning Framework, написанный на Java: DeepJava (DJ). Кто-то может спросить: зачем нам еще один DeepLearning Framework? Позвольте мне решить этот вопрос.

Я работал со многими различными фреймворками глубокого обучения, такими как MXNet, TensorFlow, PyTorch и т. д. Помимо классических классификаций фреймворков глубокого обучения, таких как символические и императивные, и других, я вижу еще одно четкое разделение между фреймворками на 2 группы:

  • Фреймворки, которые быстрее, но немного сложнее в использовании (обычно Symbolic);
  • Фреймворки, которые проще в использовании для исследователей, но они медленнее;

Ни один из этих случаев не подходит для обучения, если вы хотите погрузиться глубже, а не просто научиться их использовать. Я знаю, как легко обучать MNist с помощью Keras. Да, я знаю, как быстро можно создать Чат-бота с Sockeye и MXNet. А вы пробовали залезть под капот? Пробовали ли вы читать книгу Яна Гудфеллоу (кстати, действительно потрясающая книга) и находить соответствующие места в коде? Даже если вам посчастливилось погрузиться в внутренности MXNet или TensorFlow, обычно после этого у вас будет больше вопросов, чем раньше. Даже те фреймворки, которые претендуют на простоту использования, на самом деле очень сложны внутри.

Но подождите, а зачем мне заглядывать под капот, спросите вы? Что ж, если вы не хотите, не планируете делать это в будущем, пожалуйста, прекратите читать прямо сейчас.

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

  • Чистый, читаемый код имеет более высокий приоритет, чем быстрый код. Другими словами, любой, кто прочитал книгу о DeepLearning, должен понять, как реализован и работает фреймворк, а не только как его использовать;
  • Вы можете экспериментировать! Образовательная цель означает, что рамки открыты для экспериментов. У вас есть идея, как представить вычислительный граф неканоническим способом? Вы можете попробовать это здесь!
  • Простой в использовании;

Для моей русскоязычной аудитории

Если вы смотрели мое видео Нейронные сети, от теории к практике за 30 минут», то можете найти даже ту Нейронную сеть, о которой мы говорили в видео здесь.

Что уже реализовано

Я реализовал очень простую модель нейрона и две разные функции активации: Relu и Sigmoid. Теперь я собираюсь покрыть все комментариями и указателями на вики/книги/и т.д.

Как вы можете участвовать

Задавайте вопросы, сообщайте об ошибках, отправляйте PR! Наша ближайшая следующая цель — построить модель, которая распознает набор данных MNist.

По крайней мере, вы можете добавить старт в наш репозиторий ;)

последнее изменение: 18 февраля 2018 г.