TensorFlow.js предоставляет мощный инструментарий для построения нейронных сетей прямо в среде JavaScript. Основой любой модели является концепция слоёв, которые объединяются в последовательности для выполнения сложных вычислений.
Слой представляет собой элементарный блок нейронной сети. Каждый слой получает входные данные, выполняет вычисления и передаёт результат следующему слою. Ключевыми параметрами слоя являются:
inputShape) —
определяет структуру данных, подаваемых на слой.units) — задаёт
количество выходных элементов.activation) —
применяет нелинейную трансформацию, например relu,
sigmoid или softmax.Пример создания плотного (Dense) слоя в TensorFlow.js:
const tf = require('@tensorflow/tfjs');
const layer = tf.layers.dense({
units: 128,
activation: 'relu',
inputShape: [64]
});
Плотный слой полностью соединён с предыдущим, что позволяет модели
эффективно извлекать признаки. Для работы с изображениями чаще
используют слои свёртки (conv2d) и
пулинга (maxPooling2d), которые
обеспечивают пространственное сокращение и выделение локальных
признаков.
Модель Sequential представляет собой линейную цепочку
слоёв, где выход одного слоя становится входом следующего. Это самый
простой способ организации нейронной сети.
const model = tf.sequential({
layers: [
tf.layers.dense({units: 64, activation: 'relu', inputShape: [100]}),
tf.layers.dense({units: 10, activation: 'softmax'})
]
});
Преимущество Sequential заключается в простоте: модель
строится сверху вниз без необходимости вручную соединять слои.
Ограничение — невозможность реализовать сложные графы с разветвлениями
или множественными входами и выходами.
После построения сети её необходимо скомпилировать, указав оптимизатор, функцию потерь и метрики для оценки эффективности:
model.compile({
optimizer: 'adam',
loss: 'categoricalCrossentropy',
metrics: ['accuracy']
});
accuracy).Обучение выполняется с помощью метода fit, который
принимает данные, количество эпох и размер батча:
await model.fit(xTrain, yTrain, {
epochs: 50,
batchSize: 32,
validationSplit: 0.2
});
Функциональный API позволяет создавать модели с множественными входами и выходами, а также сложными топологиями:
const input = tf.input({shape: [64]});
const hidden = tf.layers.dense({units: 128, activation: 'relu'}).apply(input);
const output = tf.layers.dense({units: 10, activation: 'softmax'}).apply(hidden);
const complexModel = tf.model({inputs: input, outputs: output});
Функциональный подход необходим при построении сетей с ветвлениями, skip-connections или при интеграции нескольких источников данных.
TensorFlow.js позволяет сохранять модели как на локальном диске, так и в браузере. Форматы включают JSON для структуры модели и бинарные веса:
await model.save('localstorage://my-model');
const loadedModel = await tf.loadLayersModel('localstorage://my-model');
Это упрощает перенос обученных моделей между средами и повторное использование без переобучения.
Каждый слой получает тензор на входе и возвращает
тензор на выходе. Размерности тензоров должны согласовываться с
параметрами слоя. Например, слой Dense с
units=10 преобразует входной тензор
[batchSize, inputDim] в [batchSize, 10].
Понимание правил согласования размерностей критично для построения
корректной модели.
TensorFlow.js работает как в браузере, так и в Node.js. Отличие заключается в способах загрузки данных и использовании аппаратного ускорения:
Это позволяет создавать как клиентские интерактивные приложения, так и серверные решения для обработки больших массивов данных.