Установка и первоначальная настройка

ConvNetJS — это библиотека на JavaScript для реализации и обучения сверточных нейронных сетей, полностью работающая в браузере. Основное преимущество заключается в отсутствии необходимости настройки серверной части: все вычисления выполняются на стороне клиента, что упрощает экспериментирование с нейросетями.


Подключение библиотеки

ConvNetJS распространяется как один JavaScript-файл convnet-min.js, который необходимо подключить к HTML-документу. Наиболее простой способ:

<script src="path/to/convnet-min.js"></script>

После подключения все классы и функции библиотеки становятся доступными через глобальный объект convnetjs.

Прямое использование через CDN

Для быстрого старта можно использовать 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 — шаг
  • Использует функцию max pooling по умолчанию.

Слой 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 — параметр импульса для SGD
  • learning_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 — индекс наиболее вероятного класса

Резюме настройки

  • Подключение библиотеки осуществляется через локальный файл или CDN.
  • Создание тензоров Vol необходимо для хранения входных данных и весов.
  • Слои сети задаются массивом объектов с указанием типа и параметров.
  • Тренер управляет обучением сети, используя оптимизаторы и регуляризацию.
  • Перед обучением данные необходимо нормализовать и преобразовать в объекты Vol.

Правильная и тщательная первоначальная настройка обеспечивает стабильную работу сети и корректное обучение на любых входных данных.