ConvNetJS — это библиотека на JavaScript для реализации и обучения сверточных нейронных сетей, полностью работающая в браузере. Основное преимущество заключается в отсутствии необходимости настройки серверной части: все вычисления выполняются на стороне клиента, что упрощает экспериментирование с нейросетями.
ConvNetJS распространяется как один JavaScript-файл
convnet-min.js, который необходимо подключить к
HTML-документу. Наиболее простой способ:
<script src="path/to/convnet-min.js"></script>
После подключения все классы и функции библиотеки становятся
доступными через глобальный объект convnetjs.
Для быстрого старта можно использовать CDN:
<script src="https://cs.stanford.edu/people/karpathy/convnetjs/build/convnet-min.js"></script>
Это позволяет избежать локального скачивания и сразу экспериментировать с кодом.
1. Vol — многомерный массив данных
Используется для представления входных данных и весов сети.
Конструктор:
var vol = new convnetjs.Vol(width, height, depth, fillValue);
width, height, depth —
размеры тензора.fillValue — значение, которым заполняются элементы (по
умолчанию 0.0).Тензор хранит данные в одномерном массиве vol.w, что
упрощает работу с весами нейросети и ускоряет вычисления.
2. Net — сеть
var net = new convnetjs.Net();
net.makeLayers(layer_defs);
layer_defs — массив объектов, описывающих слои сети.
Каждый слой задаётся типом (type) и параметрами,
например:var layer_defs = [
{type:'input', out_sx:32, out_sy:32, out_depth:3},
{type:'conv', sx:5, filters:8, stride:1, pad:2, activation:'relu'},
{type:'pool', sx:2, stride:2},
{type:'softmax', num_classes:10}
];
Слой input Определяет размерность
входных данных (out_sx, out_sy,
out_depth). Для изображений это ширина, высота и количество
каналов.
Слой conv Сверточный слой. Основные
параметры:
sx — размер фильтра (kernel size)filters — количество фильтровstride — шаг сверткиpad — добавление нулей по границамactivation — функция активации (relu,
sigmoid, tanh)Слой pool Слой подвыборки (пулинга).
Параметры:
sx — размер окнаstride — шагСлой softmax Используется для
классификации. Параметр num_classes определяет количество
выходных категорий.
ConvNetJS предоставляет класс Trainer для обучения
сети:
var trainer = new convnetjs.SGDTrainer(net, {
method: 'adadelta',
batch_size: 10,
l2_decay: 0.001,
momentum: 0.9,
learning_rate: 0.01
});
Основные параметры:
method — алгоритм оптимизации (sgd,
adagrad, adadelta)batch_size — размер мини-батчаl2_decay — коэффициент регуляризацииmomentum — параметр импульса для SGDlearning_rate — скорость обученияОбучение производится вызовом метода train на входном
объёме и целевом классе:
trainer.train(inputVol, targetClass);
ConvNetJS использует объекты Vol для представления
изображений и других входных данных. Для стандартного изображения RGB
32×32 пикселя:
var imgVol = new convnetjs.Vol(32, 32, 3);
for(var x=0;x<32;x++) {
for(var y=0;y<32;y++) {
for(var d=0;d<3;d++) {
imgVol.set(x, y, d, imageData[x][y][d]/255.0);
}
}
}
Нормализация данных до диапазона [0, 1] важна для
стабильного обучения.
После создания слоев и тренера можно проверить сеть:
console.log(net);
Методы для прямого распространения данных:
var output = net.forward(imgVol);
var predicted_class = output.w.indexOf(Math.max(...output.w));
forward — вычисляет выход сетиoutput.w — массив вероятностей для каждого классаpredicted_class — индекс наиболее вероятного
классаVol необходимо для хранения входных
данных и весов.Vol.Правильная и тщательная первоначальная настройка обеспечивает стабильную работу сети и корректное обучение на любых входных данных.