TensorFlow.js предоставляет мощные возможности для работы с моделями машинного обучения прямо в браузере. Одним из ключевых аспектов является загрузка и использование уже обученных моделей на стороне клиента без необходимости сервера. Это обеспечивает мгновенный отклик и полную автономность приложения.
Модели в TensorFlow.js могут быть представлены в двух основных форматах:
JSON + бинарные веса Структура модели хранится в
JSON-файле, а веса — в бинарных файлах .bin. Пример
структуры:
model.json
group1-shard1of1.bin
JSON содержит информацию о слоях, конфигурации оптимизатора и пути к весам. Это основной формат для загрузки в браузере.
SavedModel (TensorFlow Python) Перед
использованием в TensorFlow.js такие модели необходимо конвертировать с
помощью инструмента tensorflowjs_converter. После конверсии
они принимают формат JSON + бинарные веса, совместимый с клиентской
загрузкой.
TensorFlow.js предоставляет несколько способов загрузки моделей:
tf.loadLayersModel — для моделей
Keras и слоистых моделей. Синтаксис:
const model = await tf.loadLayersModel('path/to/model.json');
Ключевой момент: путь может быть локальным
(./model/model.json) или URL в интернете
(https://example.com/model.json). Метод автоматически
загружает все веса.
tf.loadGraphModel — для графовых
моделей TensorFlow (TF SavedModel, TensorFlow Hub). Синтаксис:
const model = await tf.loadGraphModel('path/to/model.json');
Отличие: GraphModel предназначен для более сложных
моделей с пользовательскими операциями и поддерживает оптимизацию графа
при инференсе.
Загрузка модели выполняется асинхронно, поэтому важно использовать
async/await или then/catch для корректного
управления процессом:
async function loadModel() {
try {
const model = await tf.loadLayersModel('model/model.json');
console.log('Модель успешно загружена');
return model;
} catch (error) {
console.error('Ошибка загрузки модели:', error);
}
}
Обработка ошибок необходима, так как проблемы могут возникнуть из-за неверного пути, отсутствующих файлов или несовместимости версий.
TensorFlow.js позволяет хранить загруженные модели прямо в браузере с
помощью IndexedDB. Это сокращает время повторной загрузки и
снижает сетевой трафик.
Пример сохранения и загрузки из IndexedDB:
// Сохранение модели
await model.save('indexeddb://my-model');
// Загрузка из IndexedDB
const loadedModel = await tf.loadLayersModel('indexeddb://my-model');
Преимущество: модель остается на клиенте между сессиями, что особенно полезно для offline-приложений.
tf.loadLayersModel.tf.loadGraphModel.Минимизация веса модели
tfjs-converter --quantize_float16) снижает размер файла
почти в два раза.Lazy loading
Кеширование моделей
Классификация изображений:
const model = await tf.loadLayersModel('model/model.json');
const imgTensor = tf.browser.fromPixels(imageElement).resizeNearestNeighbor([224,224]).expandDims();
const prediction = model.predict(imgTensor);
prediction.print();Обработка текста:
const model = await tf.loadGraphModel('model/model.json');
const inputTensor = tf.tensor2d([encodedSequence], [1, sequenceLength]);
const output = model.execute({ 'input': inputTensor });
output.print();Интерактивные веб-приложения: Загруженные модели могут использоваться для предсказаний прямо в браузере без серверной поддержки, что важно для игр, образовательных платформ и приложений дополненной реальности.
Если требуется, могу подготовить детальный раздел “Загрузка больших моделей и прогрессивная инициализация весов в браузере”, где разберем оптимальные стратегии для моделей свыше 100 МБ. Это важно для производительных веб-приложений с тяжелыми нейронными сетями.
Хотите, чтобы я сразу включил этот продвинутый материал?