ConvNetJS — это библиотека на JavaScript для построения и обучения
нейронных сетей, включая сверточные, полностью связанные и рекуррентные
сети. Она предоставляет удобный API для создания сетевых слоёв,
управления их параметрами, обучения на данных и получения прогнозов.
Сеть в ConvNetJS строится как последовательность слоёв
(Layer), где каждый слой выполняет преобразование входных
данных и передаёт результат следующему слою.
Каждый слой имеет собственные параметры: веса, смещения и функции активации. Эти параметры обновляются в процессе обратного распространения ошибки (backpropagation) с использованием выбранного оптимизатора. ConvNetJS поддерживает различные типы слоёв:
input — слой для подачи данных в
сеть.conv — сверточный слой, извлекающий
локальные признаки.pool — слой подвыборки (subsampling)
для уменьшения размерности.fc — полностью связанный слой.relu, sigmoid,
tanh — слои активации.softmax — слой классификации.Энкодер в нейронных сетях используется для сжатия входной информации в компактное представление. В ConvNetJS энкодер обычно реализуется как последовательность сверточных и пулинговых слоёв, которые постепенно уменьшают пространственные размеры входа, сохраняя ключевые признаки.
Пример структуры энкодера:
var layer_input = {type:'input', out_sx:28, out_sy:28, out_depth:1};
out_sx и out_sy — размеры входного
изображения.out_depth — количество каналов (например, 1 для
чёрно-белого изображения).var layer_conv1 = {type:'conv', sx:5, filters:8, stride:1, pad:2, activation:'relu'};
sx — размер фильтра (ядра свёртки).filters — количество фильтров, определяющих глубину
выхода.stride — шаг свёртки.pad — добавление нулей по краям.activation — функция активации.var layer_pool1 = {type:'pool', sx:2, stride:2};
var layer_conv2 = {type:'conv', sx:5, filters:16, stride:1, pad:2, activation:'relu'};
var layer_pool2 = {type:'pool', sx:2, stride:2};
var layer_fc = {type:'fc', num_neurons:64, activation:'relu'};
После определения слоёв создаётся объект сети:
var net = new convnetjs.Net();
net.makeLayers([
layer_input,
layer_conv1,
layer_pool1,
layer_conv2,
layer_pool2,
layer_fc
]);
makeLayers принимает массив объектов слоёв и
автоматически формирует структуру сети.Vol
(volume):var x = new convnetjs.Vol(28,28,1,0.0);
Vol хранит значения входного изображения и
промежуточные активации.var output = net.forward(x);
Обратное распространение в ConvNetJS позволяет обновлять веса слоёв, минимизируя функцию потерь:
var trainer = new convnetjs.SGDTrainer(net, {learning_rate:0.01, momentum:0.9, batch_size:10});
var loss = trainer.train(x, y); // y — целевой вектор
SGDTrainer реализует стохастический градиентный спуск с
моментумом.После обучения энкодера компактный вектор из последнего полностью
связанного слоя (layer_fc) может служить:
Размерность выходного вектора определяется количеством нейронов последнего слоя и напрямую влияет на компромисc между информационной полнотой и компактностью представления.