TensorFlow.js предоставляет два ключевых уровня работы с нейронными сетями: Layers API и Core API. Каждый из них ориентирован на определённый тип задач и степень контроля над процессом обучения моделей. Понимание различий между ними позволяет выбирать оптимальный инструмент для конкретного проекта.
Layers API построен на концепции высокоуровневых слоёв, аналогичных Keras в Python. Он предоставляет готовые блоки (Dense, Conv2D, LSTM и т.д.) для быстрого конструирования моделей. Основная идея заключается в том, чтобы абстрагировать работу с тензорами и градиентами, предоставляя разработчику удобный способ описывать модель через последовательность слоёв или функциональные графы.
Core API — низкоуровневый инструмент для работы с тензорами, математическими операциями и градиентным спуском. Он позволяет создавать произвольные вычислительные графы и самостоятельно управлять шагами обучения, оптимизаторами и функциями потерь. Этот подход даёт полный контроль над внутренними процессами модели, но требует более детального понимания линейной алгебры и вычислительной оптимизации.
Layers API использует два основных способа определения моделей:
Sequential — последовательная модель, где каждый слой имеет один вход и один выход.
const model = tf.sequential();
model.add(tf.layers.dense({units: 64, activation: 'relu', inputShape: [inputSize]}));
model.add(tf.layers.dense({units: 10, activation: 'softmax'}));Functional API — позволяет строить модели с несколькими входами и выходами, объединять слои в сложные графы.
const input = tf.input({shape: [inputSize]});
const hidden = tf.layers.dense({units: 64, activation: 'relu'}).apply(input);
const output = tf.layers.dense({units: 10, activation: 'softmax'}).apply(hidden);
const model = tf.model({inputs: input, outputs: output});Core API требует самостоятельного определения прямого и обратного прохода:
const W = tf.variable(tf.randomNormal([inputSize, outputSize]));
const b = tf.variable(tf.zeros([outputSize]));
function predict(x) {
return tf.matMul(x, W).add(b);
}
const optimizer = tf.train.sgd(0.01);
optimizer.minimize(() => {
const preds = predict(xTrain);
const loss = tf.losses.meanSquaredError(yTrain, preds);
return loss;
});
Здесь каждая операция явно прописана, включая матричное умножение, смещения, функции потерь и оптимизацию.
Layers API скрывает сложность градиентов и
оптимизаторов, предоставляя методы compile и
fit для обучения:
model.compile({
optimizer: 'adam',
loss: 'categoricalCrossentropy',
metrics: ['accuracy']
});
await model.fit(xTrain, yTrain, {epochs: 20, batchSize: 32});Core API требует ручного расчёта потерь и вызова
tf.grad или optimizer.minimize. Это
обеспечивает максимальную гибкость при создании
нестандартных моделей или экспериментов с новыми архитектурами.
Layers API автоматизирует:
Core API требует явного управления:
tf.variableGrads,Это делает Core API предпочтительным при разработке нестандартных алгоритмов обучения, таких как дифференцируемое программирование или кастомные функции потерь.
Layers API ограничен заранее определёнными слоями, но позволяет создавать кастомные слои, расширяя функциональность. Подходит для большинства классических задач компьютерного зрения, NLP и табличных данных.
Core API не накладывает ограничений — любые вычисления над тензорами возможны. Он идеально подходит для:
В большинстве случаев Layers API обеспечивает достаточную производительность, так как внутренние слои оптимизированы и используют ускорение через WebGL/WebGPU. Core API может быть чуть медленнее при стандартных задачах из-за необходимости ручного контроля, но позволяет оптимизировать вычисления под конкретные сценарии.
| API | Применение |
|---|---|
| Layers API | Классификация изображений, распознавание текста, предсказания на табличных данных. |
| Core API | Создание GAN, кастомные RNN/LSTM, алгоритмы дифференцируемого программирования, эксперименты с нестандартными функциями потерь. |
Ключевые выводы:
Если требуется, можно построить гибридный подход, используя Core API внутри кастомных слоёв Layers API, что сочетает удобство и контроль.