ConvNetJS — это библиотека на JavaScript, предназначенная для создания и обучения нейронных сетей прямо в браузере или на сервере с Node.js. Она поддерживает как полносвязные, так и сверточные сети, позволяя строить глубокие модели для классификации, регрессии и распознавания изображений.
Многослойная нейронная сеть состоит из входного слоя, одного или нескольких скрытых слоев и выходного слоя. Каждый слой включает нейроны, соединённые с нейронами соседних слоев через веса. Эти веса настраиваются в процессе обучения.
Для определения сети используется объект convnetjs.Net.
Сеть строится из последовательности слоев, описанных с помощью объектов
типа convnetjs.Layer.
Пример структуры сети:
var layer_defs = [];
layer_defs.push({type:'input', out_sx:1, out_sy:1, out_depth:4}); // Входной слой
layer_defs.push({type:'fc', num_neurons:10, activation:'relu'}); // Полносвязный скрытый слой
layer_defs.push({type:'fc', num_neurons:3, activation:'softmax'}); // Выходной слой для 3 классов
var net = new convnetjs.Net();
net.makeLayers(layer_defs);
Ключевые моменты:
input задаёт размерность входа: out_sx,
out_sy и out_depth.fc (fully connected) — полносвязный слой, где каждый
нейрон соединён с нейронами предыдущего слоя.activation определяет функцию активации:
relu, sigmoid, tanh,
softmax.Прямое распространение (forward) вычисляет выход сети
для данного входного вектора:
var x = new convnetjs.Vol([0.1, 0.2, 0.3, 0.4]); // Входной вектор
var output = net.forward(x);
console.log(output.w);
Vol — объект, представляющий данные слоя. Он хранит
массив w значений.Обучение сети происходит методом обратного
распространения (backward) с использованием
стохастического градиентного спуска (SGD).
Пример:
var trainer = new convnetjs.SGDTrainer(net, {learning_rate:0.01, momentum:0.9, batch_size:5, l2_decay:0.001});
for(var i=0;i<100;i++){
var x = new convnetjs.Vol([0.1*i, 0.2*i, 0.3*i, 0.4*i]);
trainer.train(x, 2); // 2 — индекс правильного класса
}
Объяснение параметров SGDTrainer:
learning_rate — скорость обучения.momentum — коэффициент инерции, ускоряющий
сходимость.batch_size — количество примеров за один шаг
обучения.l2_decay — коэффициент L2-регуляризации для уменьшения
переобучения.Функции активации определяют, как комбинированный сигнал нейронов преобразуется в выход слоя:
relu(x) = max(0, x) — ускоряет обучение и предотвращает
затухание градиентов.sigmoid(x) = 1/(1+exp(-x)) — ограничивает выход в
диапазоне [0,1], подходит для вероятностей.tanh(x) — аналогично sigmoid, но с диапазоном [-1,1],
улучшает центрирование данных.softmax — используется на выходном слое для
многоклассовой классификации.ConvNetJS поддерживает следующие типы слоев:
Слои соединяются последовательно, формируя граф вычислений. Для сложных архитектур можно комбинировать сверточные и полносвязные слои.
// Создание сети
var layer_defs = [];
layer_defs.push({type:'input', out_sx:1, out_sy:1, out_depth:4});
layer_defs.push({type:'fc', num_neurons:5, activation:'relu'});
layer_defs.push({type:'fc', num_neurons:3, activation:'softmax'});
var net = new convnetjs.Net();
net.makeLayers(layer_defs);
// Обучение
var trainer = new convnetjs.SGDTrainer(net, {learning_rate:0.01, momentum:0.9});
var data = [
{x:[0.1,0.2,0.3,0.4], y:0},
{x:[0.5,0.6,0.7,0.8], y:1},
{x:[0.9,1.0,1.1,1.2], y:2}
];
for(var i=0;i<200;i++){
data.forEach(d=>{
var x = new convnetjs.Vol(d.x);
trainer.train(x, d.y);
});
}
// Предсказание
var test = new convnetjs.Vol([0.2,0.3,0.4,0.5]);
var result = net.forward(test);
console.log(result.w); // вероятности классов
ConvNetJS позволяет сохранять веса сети в JSON и восстанавливать их:
var json = net.toJSON(); // экспорт сети
var net2 = new convnetjs.Net();
net2.fromJSON(json); // импорт сети
Так можно обучать сеть один раз, сохранять состояние и использовать позже без повторного обучения.
batch_size) при обучении
на больших данных.dropout,
l2_decay) для предотвращения переобучения.learning_rate,
постепенно увеличивая при стабилизации.Многослойные сети в ConvNetJS обеспечивают гибкость в построении архитектур. Полносвязные слои подходят для табличных данных и классификации с фиксированными признаками, а комбинация с функциями активации позволяет сети моделировать сложные нелинейные зависимости. Тщательная настройка гиперпараметров и структуры слоев критически важна для достижения высокой точности.