ConvNetJS — это полностью клиентская библиотека для создания, обучения и тестирования нейронных сетей на языке JavaScript. Она реализует как полносвязные сети (Fully Connected), так и свёрточные (Convolutional) сети, позволяя работать непосредственно в браузере без серверной инфраструктуры. Основное преимущество заключается в интерактивном обучении и визуализации процесса.
В ConvNetJS нейронная сеть строится как последовательность слоев (layers). Каждый слой принимает входные данные, выполняет вычисления и передаёт результат следующему слою. Для работы с изображениями критически важны следующие типы слоев:
Конфигурация сети задаётся через объект
net = new convnetjs.Net(), после чего с помощью
net.makeLayers(layers) создаётся последовательность слоев.
Например, свёрточная сеть для изображений 32x32x3 может быть описана
так:
var layers = [];
layers.push({type:'input', width:32, height:32, depth:3});
layers.push({type:'conv', filters:16, size:3, stride:1, pad:1, activation:'relu'});
layers.push({type:'pool', pool:2, stride:2});
layers.push({type:'conv', filters:32, size:3, stride:1, pad:1, activation:'relu'});
layers.push({type:'pool', pool:2, stride:2});
layers.push({type:'fc', num_neurons:64, activation:'relu'});
layers.push({type:'softmax', num_classes:10});
net.makeLayers(layers);
Ключевые параметры свёрточного слоя:
filters — количество фильтров, определяющих, сколько
признаков извлекается.size — размер фильтра, обычно 3x3 или 5x5.stride — шаг смещения фильтра при проходе по
изображению.pad — количество пикселей для дополнения границ
изображения (zero-padding).Обучение сети происходит через оптимизатор Trainer,
который принимает параметры скорости обучения
(learning_rate), типа градиентного спуска и
регуляризации:
var trainer = new convnetjs.Trainer(net, {
method: 'sgd',
learning_rate: 0.01,
momentum: 0.9,
batch_size: 20,
l2_decay: 0.001
});
Процесс обучения:
trainer.train(x, y), где x —
входной Vol, а y — правильная метка класса.Для эффективного обучения на изображениях рекомендуется:
После обучения сеть может использоваться для классификации новых изображений:
var x = new convnetjs.Vol(imageWidth, imageHeight, imageDepth);
var probabilities = net.forward(x);
var predictedClass = probabilities.w.indexOf(Math.max(...probabilities.w));
Важные моменты при оценке:
forward не изменяет веса, только вычисляет
выход.ConvNetJS требует явного задания размеров входного изображения. Для изображений различных размеров применяются:
ConvNetJS позволяет визуализировать обученные фильтры свёрточных слоев, что помогает понять, какие признаки сеть научилась распознавать. Например, фильтры первого слоя часто выявляют границы и углы, а последующие слои — сложные текстуры и комбинации признаков.
var convLayer = net.layers[1]; // первый свёрточный слой
for(var i=0;i
Работа с изображениями в браузере накладывает ограничения по памяти и скорости. Рекомендуется:
Объёмные сети можно тестировать постепенно, увеличивая сложность и количество фильтров после отладки базовой модели.