ConvNetJS — это библиотека на JavaScript для построения и обучения нейронных сетей, специализирующаяся на сверточных сетях. Она обеспечивает инструменты для создания сетевой архитектуры, инициализации параметров, прямого распространения сигналов (forward propagation), обратного распространения ошибки (backpropagation) и оптимизации весов.
Ключевые компоненты:
Vol — основной объект для хранения
входных данных, весов и градиентов.Layer — базовый класс для всех типов
слоев. Каждый слой реализует методы forward и
backward.Net — контейнер для последовательности
слоев и управления обучением.Trainer — объект, отвечающий за
процесс обучения: вычисление потерь и обновление весов по выбранному
алгоритму оптимизации.Архитектура сети определяется как последовательность слоев. Слои могут быть следующих типов:
InputLayer — начальный слой, задающий
форму входного тензора.FullyConnLayer — полносвязный слой с
возможностью применения функций активации.ConvLayer — сверточный слой с ядрами
заданного размера, stride и padding.PoolLayer — слой подвыборки (max
pooling), сокращающий размерность признаков.SoftmaxLayer — выходной слой для
классификации с вероятностной интерпретацией.Каждый слой хранит параметры весов, смещений и промежуточные значения для обратного распространения. При создании сети важно корректно согласовать размеры тензоров между соседними слоями.
1. Несоответствие размеров входов и выходов слоев
Наиболее частая проблема возникает, когда выход одного слоя не
совпадает по размерности с входом следующего. ConvNetJS не всегда
сообщает точное место ошибки, поэтому необходимо вручную проверять форму
Vol после каждого слоя:
console.log(layer.out_sx, layer.out_sy, layer.out_depth);
2. Неправильная конфигурация параметров сверточного слоя
Сверточные слои требуют аккуратного задания следующих параметров:
filter_size — размер ядраstride — шаг сверткиpad — добавление нулей по краямОшибки в этих параметрах приводят к неожиданному сокращению размерности или к невозможности соединения с последующими слоями.
3. Неправильный выбор функции активации
Некорректное использование активации может привести к исчезающим или
взрывающимся градиентам. Например, использование tanh после
relu может ограничивать диапазон градиентов. ConvNetJS
позволяет задавать активацию в конструкторе слоя:
var fc = new convnetjs.FullyConnLayer({num_neurons: 100, activation: 'relu'});
4. Ошибки при работе с батчами
ConvNetJS работает с Vol объектов, представляющих как
отдельные примеры, так и батчи. Использование несогласованных размеров
батча вызывает ошибки на этапе forward и
backward. Размер батча должен быть одинаковым для всех
входных слоев и соответствовать ожиданиям Trainer.
Пошаговая проверка слоев:
Такой метод позволяет локализовать ошибки до конкретного слоя и избежать сложных отладок на этапе обучения.
Логирование градиентов
При обучении можно проверить корректность обратного распространения, выводя градиенты весов:
console.log(layer.filters[0].dw);
Если градиенты слишком малы или слишком велики, это указывает на неправильную инициализацию весов или некорректную функцию активации.
ConvNetJS включает встроенный веб-интерфейс для визуализации весов и активаций:
Регулярная визуализация облегчает обнаружение ошибок в архитектуре, особенно при сложных сверточных сетях.
ConvNetJS позволяет создавать собственные слои, наследуя
Layer и реализуя методы forward и
backward. Ошибки чаще всего возникают в:
Vol.Пошаговое тестирование каждого нового слоя на минимальных данных обеспечивает стабильность сети.