ConvNetJS — это чисто клиентская библиотека для построения и обучения нейронных сетей, полностью написанная на JavaScript. Она поддерживает как обучение многослойных перцептронов (MLP), так и свёрточных нейронных сетей (CNN), что делает её удобной для экспериментов с моделями прямо в браузере без необходимости установки сложного ПО.
Ключевой особенностью является обучение на стороне клиента, используя возможности процессора пользователя. Это позволяет выполнять демонстрации и прототипирование без серверной инфраструктуры.
В ConvNetJS основные сущности:
Vol — многомерный массив данных, который
используется для хранения входов, весов, градиентов и активаций. Каждый
Vol имеет размеры (width, height, depth) и содержит
flattened массив значений, что обеспечивает удобную
работу с матрицами и тензорами.
Net — объект нейронной сети. Содержит список
слоёв и методы для прямого распространения (forward) и
обратного распространения ошибки (backward).
Layer — базовый блок сети. Каждый слой имеет тип
(fc, conv, pool,
softmax, relu и др.), параметры и внутренние
веса.
Пример создания Vol:
var input = new convnetjs.Vol(32, 32, 3); // изображение 32x32 с 3 каналами (RGB)
input.set(0.5); // заполняем все значения 0.5
fc)Полносвязный слой соединяет каждый нейрон с каждым входным элементом. Используется для классификации после свёрточных слоёв.
Параметры:
num_neurons — количество нейронов.activation — функция активации (relu,
sigmoid, tanh).Пример:
var layer_fc = { type: 'fc', num_neurons: 100, activation: 'relu' };
net.addLayer(layer_fc);
conv)Свёрточные слои применяют фильтры к входным данным, выделяя локальные признаки. Важные параметры:
filter_size — размер ядра свёртки.num_filters — количество фильтров.stride — шаг сканирования фильтра.pad — добавление нулей вокруг границ для сохранения
размеров.Пример:
var layer_conv = { type: 'conv', filter_size: 5, num_filters: 16, stride: 1, pad: 2, activation: 'relu' };
net.addLayer(layer_conv);
pool)Pooling уменьшает размерность данных и увеличивает устойчивость к сдвигам. Чаще всего используется max pooling.
Параметры:
pool_size — размер окна.stride — шаг.var layer_pool = { type: 'pool', pool_size: 2, stride: 2 };
net.addLayer(layer_pool);
ConvNetJS включает несколько функций активации:
relu — обнуляет отрицательные значения.sigmoid — сглаживает значения между 0 и 1.tanh — значения между -1 и 1.softmax — нормализует выходные данные в
вероятности.Активация задаётся при создании слоя и влияет на прямое и обратное распространение.
Для обучения используется стохастический градиентный спуск (SGD) и его модификации. Основные шаги:
softmax для классификации, squared error для
регрессии).Пример обучения:
var trainer = new convnetjs.SGDTrainer(net, {
learning_rate: 0.01,
momentum: 0.9,
batch_size: 10,
l2_decay: 0.001
});
trainer.train(input, label); // input — Vol, label — индекс класса
ConvNetJS оптимизирован для работы на CPU. Она не использует GPU, что делает её медленнее для больших сетей, но идеально подходит для:
Сети можно хранить и загружать через JSON, что упрощает сохранение состояния между сессиями:
var json = net.toJSON();
var net2 = new convnetjs.Net();
net2.fromJSON(json);
ConvNetJS предоставляет встроенные функции для визуализации:
Это помогает следить за прогрессом обучения и выявлять ошибки в архитектуре или параметрах сети.
Преимущества:
Ограничения: