ConvNetJS — это чисто JavaScript библиотека для построения и обучения нейронных сетей, ориентированная на сверточные сети (Convolutional Neural Networks, CNN). Она реализует как полносвязные слои, так и сверточные, пулинговые и различные типы функций активации, что позволяет использовать её для задач классификации изображений, распознавания текста и других видов данных, представленных в виде массивов чисел.
Библиотека работает полностью на стороне клиента, не требуя серверной поддержки, что делает её удобной для экспериментов и образовательных проектов. Она поддерживает обучение как с использованием стохастического градиентного спуска (SGD), так и с более продвинутыми оптимизаторами, такими как Adagrad и Adam.
Сеть в ConvNetJS строится из последовательности слоев, каждый из которых выполняет конкретную функцию:
Каждый слой можно настроить через параметры: количество нейронов или фильтров, размер ядра свертки, шаг пулинга, тип функции активации. Это позволяет гибко адаптировать архитектуру под конкретную задачу.
Для создания сети используется объект convnetjs.Net, в
который последовательно добавляются слои:
var net = new convnetjs.Net();
net.addLayer({type:'input', out_sx:28, out_sy:28, out_depth:1});
net.addLayer({type:'conv', sx:5, filters:8, stride:1, pad:2, activation:'relu'});
net.addLayer({type:'pool', sx:2, stride:2});
net.addLayer({type:'softmax', num_classes:10});
Ключевые моменты инициализации:
out_sx, out_sy, out_depth
задают ширину, высоту и глубину входного изображения.sx в сверточных и пулинговых слоях определяет размер
фильтра.stride — шаг свертки или пулинга.pad позволяет добавлять отступы для сохранения
размеров.activation задаёт функцию активации для сверточного
слоя.num_classes — количество классов для классификации на
выходе.ConvNetJS работает с входными данными в виде массивов или объектов
Vol. Объект Vol представляет многомерный
массив чисел и используется для передачи данных между слоями.
Пример создания входного объёма:
var x = new convnetjs.Vol(28, 28, 1); // создаёт Vol размером 28x28x1
for(var i=0;i<28*28;i++) {
x.w[i] = Math.random(); // заполнение случайными значениями
}
В задачах классификации изображения обычно нормализуются, чтобы значения пикселей находились в диапазоне [0,1] или [-1,1]. Это ускоряет обучение и повышает стабильность градиентного спуска.
ConvNetJS использует объект convnetjs.SGDTrainer для
обучения сети методом стохастического градиентного спуска. Настройки
тренера позволяют управлять скоростью обучения, регуляризацией и типом
оптимизации.
Пример создания тренера:
var trainer = new convnetjs.SGDTrainer(net, {
method: 'adam',
learning_rate: 0.001,
l2_decay: 0.001
});
Пояснения параметров:
method — тип оптимизатора (sgd,
adagrad, adam).learning_rate — скорость обучения, определяет величину
корректировки весов на каждом шаге.l2_decay — коэффициент L2-регуляризации,
предотвращающий переобучение.Обучение выполняется вызовом метода train для каждого
примера:
trainer.train(x, target_index);
x — входной объект Vol.target_index — индекс правильного класса (целое число
от 0 до N-1).ConvNetJS автоматически выполняет forward pass и backward pass:
Пример получения предсказания после прямого прохода:
var output = net.forward(x);
console.log(output.w); // массив вероятностей классов
Сеть можно сохранять в JSON и загружать для дальнейшего использования:
var json = net.toJSON();
var net2 = new convnetjs.Net();
net2.fromJSON(json);
Это особенно удобно для тестирования обученных моделей без повторного обучения.
softmax.ConvNetJS сочетает гибкость и простоту, позволяя создавать полноценные сверточные сети в чистом JavaScript. Владение этой библиотекой формирует фундаментальные навыки работы с нейронными сетями и понимание процессов прямого и обратного распространения, оптимизации и настройки архитектуры моделей.