TensorFlow.js предоставляет мощный инструментарий для использования предобученных моделей, что позволяет выполнять сложные задачи машинного обучения без необходимости обучать модели с нуля. Это особенно актуально для задач классификации изображений, текста и других типов данных. Основная идея заключается в том, что модель уже обучена на большом наборе данных и может быть использована для извлечения признаков или прямой классификации.
В TensorFlow.js доступно несколько способов загрузки предобученной модели:
import * as tf from '@tensorflow/tfjs';
const model = await tf.loadLayersModel('https://example.com/model.json');
@tensorflow-models, таких как MobileNet, Coco-SSD,
BodyPix:import * as mobilenet from '@tensorflow-models/mobilenet';
const model = await mobilenet.load();
Второй подход удобен, так как модель сразу оптимизирована для браузера и содержит функции классификации и предобработки данных.
Для корректной работы модели необходимо привести входные данные к формату, ожидаемому моделью:
const img = document.getElementById('image');
const tensor = tf.browser.fromPixels(img)
.resizeNearestNeighbor([224, 224])
.toFloat()
.expandDims();
const normalized = tensor.div(tf.scalar(127.5)).sub(tf.scalar(1));
После подготовки тензора можно выполнить классификацию:
const predictions = await model.classify(img);
predictions.forEach(p => {
console.log(`${p.className}: ${p.probability.toFixed(4)}`);
});
Ключевой момент: classify возвращает
массив объектов, где className — название класса, а
probability — вероятность принадлежности изображения этому
классу.
Для задач transfer learning часто используется извлечение признаков из последнего скрытого слоя модели:
const activation = model.infer(tensor, 'conv_preds');
activation — это тензор признаков, который можно
использовать в качестве входа для собственной модели, обучаемой на новом
наборе данных.
model.layers.forEach(layer => layer.trainable = false);
const newModel = tf.sequential();
newModel.add(tf.layers.dense({inputShape: [activation.shape[1]], units: 128, activation: 'relu'}));
newModel.add(tf.layers.dense({units: numClasses, activation: 'softmax'}));
newModel.compile({
optimizer: tf.train.adam(),
loss: 'categoricalCrossentropy',
metrics: ['accuracy']
});
await newModel.fit(trainXs, trainYs, {epochs: 10, batchSize: 32});
await tf.setBackend('webgl');
Для мобильных устройств можно применять тензорные оптимизации и уменьшать размер входных изображений.
Предобученные модели в TensorFlow.js часто поставляются в виде легковесных версий (MobileNet, Tiny YOLO), что позволяет выполнять классификацию с минимальной задержкой.
TensorFlow.js поддерживает также текстовые модели, такие как Universal Sentence Encoder:
import * as use from '@tensorflow-models/universal-sentence-encoder';
const model = await use.load();
const embeddings = await model.embed(['Пример текста для классификации']);
Эти векторы признаков можно подавать на вход классификатора для анализа тональности, тематической классификации или кластеризации.
@tensorflow-models, уже включают
функции предобработки, что облегчает интеграцию.tf.data API, чтобы создавать потоковые
батчи и избегать переполнения памяти.Предобученные модели в TensorFlow.js открывают возможность создавать мощные веб-приложения с машинным обучением, используя готовые решения для извлечения признаков и классификации, что значительно ускоряет разработку и уменьшает вычислительные затраты.