ConvNetJS — это чисто JavaScript-библиотека для создания и обучения нейронных сетей прямо в браузере или в среде Node.js. Она позволяет реализовывать как полносвязные сети (fully connected), так и сверточные нейронные сети (CNN) без необходимости установки сложных зависимостей.
Ключевые особенности:
В ConvNetJS сеть строится как последовательность слоев, каждый из которых обрабатывает входные данные и передает результат следующему.
Пример слоев:
Dense (полносвязный слой)
{type:'fc', num_neurons:100, activation:'relu'}
num_neurons — количество нейронов в слое.activation — функция активации: relu,
sigmoid, tanh, softmax.Conv (сверточный слой)
{type:'conv', sx:5, filters:16, stride:1, pad:2, activation:'relu'}
sx — размер фильтра.filters — количество фильтров.stride — шаг свертки.pad — количество нулей для заполнения границ.Pool (слой подвыборки)
{type:'pool', sx:2, stride:2}
sx — размер окна подвыборки.stride — шаг перемещения окна.Dropout (слой регуляризации)
{type:'dropout', p:0.5}
p — вероятность отключения нейронов для уменьшения
переобучения.Сеть создается через объект convnetjs.Net и
настраивается методом makeLayers:
var net = new convnetjs.Net();
net.makeLayers([
{type:'input', out_sx:28, out_sy:28, out_depth:1},
{type:'conv', sx:5, filters:8, stride:1, pad:2, activation:'relu'},
{type:'pool', sx:2, stride:2},
{type:'fc', num_neurons:64, activation:'relu'},
{type:'softmax', num_classes:10}
]);
Примечания:
input слой определяет размер входного изображения или
массива признаков.softmax используется для многоклассовой
классификации.ConvNetJS использует Trainer для обучения сети. Основные
параметры:
var trainer = new convnetjs.Trainer(net, {
method:'sgd', // алгоритм оптимизации
learning_rate:0.01, // скорость обучения
l2_decay:0.001, // коэффициент L2-регуляризации
batch_size:20 // размер мини-батча
});
Поддерживаются также методы adadelta и
adam, позволяющие ускорить сходимость и улучшить
устойчивость обучения.
Входные данные должны быть представлены в виде объектов
convnetjs.Vol:
var x = new convnetjs.Vol([0.0, 1.0, 2.0, 3.0]);
var y = 2; // метка класса
Для изображений часто используют одномерные массивы или нормализованные пиксели (0..1).
Обучение происходит методом train или через вызов
trainer.train:
var stats = trainer.train(x, y);
console.log('Loss:', stats.loss);
x — входной вектор или изображение.y — индекс класса.stats.loss — значение функции потерь на текущем
шаге.Мини-батчи помогают стабилизировать градиенты и ускоряют обучение.
После обучения сеть используется для классификации:
var predicted_class = net.forward(x).w.indexOf(Math.max(...net.forward(x).w));
forward возвращает объект Vol,
содержащий выходные значения сети.indexOf(Math.max(...)) позволяет определить класс с
максимальной вероятностью.Регуляризация и предотвращение переобучения:
Пример Dropout в полносвязном слое:
{type:'fc', num_neurons:128, activation:'relu', dropout:0.5}
Ускорение сходимости:
relu, optional dropout.net.getParamsAndGrads() — получение всех весов и
градиентов.net.toJSON() / net.fromJSON(json) —
сохранение и восстановление сети.ConvNetJS позволяет строить классификаторы на любое количество
классов через слой softmax:
{type:'softmax', num_classes:10}
cross-entropy, которая
автоматически считается в trainer.train.Эта последовательность обеспечивает эффективное выделение признаков и стабильное обучение модели для задач классификации как изображений, так и табличных данных.