ConvNetJS — это чисто клиентская JavaScript-библиотека для построения и обучения нейронных сетей, специализирующаяся на свёрточных нейронных сетях (CNN) и многослойных перцептронах (MLP). Основной акцент библиотеки сделан на лёгкость интеграции в браузерные проекты и на визуализацию обучения. Архитектура ConvNetJS организована вокруг нескольких ключевых компонентов: моделей, слоёв, тренеров, тензоров и обработки данных.
ConvNetJS использует объектно-ориентированную модель слоев. Каждый слой — это отдельный объект, который инкапсулирует:
forward и backward);Слои классифицируются следующим образом:
Каждый слой имеет метод forward(V),
который принимает объект Vol (тензор) и возвращает выходные
данные, и метод backward(), который
вычисляет градиенты относительно входных данных и параметров.
Основной структурный элемент данных в ConvNetJS — объект Vol. Он представляет собой трёхмерный массив (ширина × высота × глубина), который хранит как значения нейронов, так и градиенты для обратного распространения ошибки.
Ключевые свойства объекта Vol:
w — одномерный массив, содержащий значения
нейронов;dw — массив градиентов;sx, sy, depth — размеры по
осям;Vol обеспечивает совместимость между слоями разной архитектуры и упрощает вычисление градиентов в обратном проходе.
Сеть в ConvNetJS создаётся через объект
Net, который хранит
последовательность слоёв. Основные методы объекта
Net:
addLayer(layer) — добавляет слой в сеть;forward(V, isTraining) — выполняет прямой проход по
всем слоям;backward(dout) — запускает обратное распространение
ошибки;getParamsAndGrads() — возвращает все параметры сети с
соответствующими градиентами для тренера.Такой подход делает архитектуру сети модульной и расширяемой, позволяя комбинировать свёрточные, пулинговые и полносвязные слои в одной модели.
Для обучения ConvNetJS предоставляет класс
Trainer, который инкапсулирует алгоритмы
оптимизации. Основные возможности:
train(x, y) для обновления весов на основе одного
или нескольких примеров.Trainer отделён от структуры сети, что позволяет использовать один и тот же Net с разными стратегиями оптимизации.
ConvNetJS не имеет встроенных сложных средств загрузки изображений, но предоставляет:
Данные передаются в сеть как объекты Vol, что унифицирует обработку изображений, аудио и других многомерных признаков.
Архитектура строится по принципу “связанных Vol и слоёв”:
Такое строение упрощает эксперименты с различными архитектурами без изменения ядра библиотеки.