ConvNetJS — это чисто клиентская библиотека на JavaScript для построения и обучения нейронных сетей, включая полносвязные сети (fully connected), свёрточные (convolutional) и рекуррентные (recurrent) архитектуры. Одной из ключевых особенностей является гибкость в построении сетей с различными слоями, однако важно понимать нюансы совместимости архитектур при их проектировании и обучении.
Полносвязные (Dense) слои принимают входные векторы
фиксированной размерности. Любой выходной слой предыдущего слоя должен
быть преобразован в одномерный вектор. Если входной слой имеет
трёхмерную форму (например, результат свёрточного слоя), необходимо
использовать слой Flatten для конвертации данных.
Свёрточные (Convolutional) слои ожидают на вход трёхмерный тензор: ширина × высота × каналы. Они могут быть совместимы с другими свёрточными слоями или слоями подвыборки (pooling). Использование полносвязного слоя после свёрточных требует внимательного преобразования формы данных.
Слои подвыборки (Pooling) уменьшают пространственные
размеры тензора и обычно применяются после свёрточных слоев. Их
параметры (stride, filter size) должны быть
согласованы с размерами входного тензора, чтобы избежать отрицательных
или дробных размеров на выходе.
Слои активации (ReLU,
Sigmoid, Tanh) не изменяют размерность данных,
но влияют на совместимость через форматы данных: они должны следовать
сразу после слоя, который производит выход в корректной форме.
Размерность тензоров является критическим аспектом совместимости. В
ConvNetJS каждый слой хранит out_sx, out_sy,
out_depth — параметры выходного тензора. Несовпадение этих
параметров при последовательном подключении слоев приведёт к
ошибкам.
Пример:
32×32×3, фильтр 5×5,
stride 1 → выход 28×28×10.2×2 с stride 2 → выход
14×14×10.14×14×10 = 1960 входных
нейронов.Правильное понимание и расчет размеров является обязательным для корректной совместимости архитектуры.
ConvNetJS поддерживает несколько оптимизаторов: SGD,
AdaGrad, RMSProp. Совместимость с архитектурой
определяется типом слоя и используемой функцией потерь
(loss).
Особенности:
Softmax слой совместим только с задачами
классификации.Regression слой подходит для предсказания непрерывных
величин.temporal length), иначе
оптимизатор не сможет обновлять веса правильно.Оптимизаторы RMSProp и AdaGrad
автоматически корректируют скорость обучения для каждого параметра, но
при неправильной архитектуре (например, неправильные формы входа) могут
вызвать некорректное обновление весов.
ConvNetJS позволяет сохранять и загружать веса нейросети через объекты JSON. Для успешной передачи весов необходимо совпадение структуры слоев: количество нейронов, размер фильтров, stride и форма входа должны быть идентичны.
Важно:
ConvNetJS работает как с изображениями, так и с табличными данными. При проектировании архитектуры необходимо учитывать:
width × height × channels; свёрточные слои обязательны для
извлечения локальных признаков.Некорректное сочетание типа данных и слоя приводит к ошибкам
совместимости на этапе вызова forward и
backward.
out_sx,
out_sy, out_depth).forward с небольшим количеством
данных для выявления проблем с размерностями.Совместимость архитектур в ConvNetJS требует тщательного контроля всех параметров слоев и согласования их между собой. Нарушение этих правил приводит к логическим и вычислительным ошибкам, которые могут быть неочевидны на первый взгляд.