TensorFlow.js предоставляет гибкие возможности для
работы с нейронными сетями в браузере и на сервере Node.js. Одним из
ключевых инструментов является функция
tf.loadLayersModel, предназначенная для
загрузки заранее обученных моделей в формате Keras или
TensorFlow.js.
Функция tf.loadLayersModel поддерживает следующие
варианты загрузки моделей:
HTTP(S)-ресурс Модель может храниться на веб-сервере и быть доступна по URL:
const model = await tf.loadLayersModel('https://example.com/model.json');
В этом случае model.json — основной
файл, содержащий архитектуру сети, веса и метаданные. Весовые файлы
хранятся в отдельной папке или рядом с JSON-файлом, с расширением
.bin.
Локальная файловая система (Node.js) Для серверной версии Node.js возможна загрузка через файловый путь:
const model = await tf.loadLayersModel('file://./local_model/model.json');IndexedDB (в браузере) TensorFlow.js поддерживает хранение моделей в IndexedDB, что позволяет сохранять и загружать их между сессиями:
await model.save('indexeddb://my-model');
const loadedModel = await tf.loadLayersModel('indexeddb://my-model');Файл model.json содержит следующие ключевые
компоненты:
modelTopology — JSON-представление
архитектуры модели (слои, связи, параметры).weightsManifest — массив объектов с
информацией о весах (имена файлов, типы, порядок).trainingConfig (необязательно) —
конфигурация компиляции и оптимизаторов, если модель сохранялась вместе
с обучением.tf.loadLayersModel возвращает Promise,
что делает её асинхронной. Использование await гарантирует,
что модель полностью загружена перед дальнейшей работой:
async function loadModel() {
const model = await tf.loadLayersModel('https://example.com/model.json');
console.log('Модель успешно загружена');
model.summary();
}
loadModel();
Асинхронность важна, так как процесс загрузки может быть длительным из-за передачи больших весов и архитектуры через сеть.
После загрузки модель ведет себя аналогично объекту
tf.Sequential или tf.LayersModel, созданному
вручную:
const input = tf.tensor2d([[0.5, 0.8]]);
const prediction = model.predict(input);
prediction.print();
model.compile({
optimizer: 'adam',
loss: 'categoricalCrossentropy',
metrics: ['accuracy']
});
await model.save('localstorage://my-model');
Это позволяет использовать загруженную модель повторно без повторной загрузки с сервера.
tf.loadLayersModel автоматически загружает веса из
.bin файлов. Возможна дополнительная настройка через
параметр weightOptions:
const model = await tf.loadLayersModel('https://example.com/model.json', {
strict: true, // выбросить ошибку при несоответствии архитектуры и весов
});
strict: true гарантирует, что
структура сети и веса совпадают строго по именам.strict: false позволяет игнорировать
несоответствия, загружая только совпадающие слои. Полезно при частичном
дообучении или замене слоев.Чаще всего при загрузке моделей возникают следующие проблемы:
model.json не найден или
недоступен — проверяется путь и права доступа..bin файлы находятся в правильной
директории.Для диагностики ошибок рекомендуется использовать
try/catch:
try {
const model = await tf.loadLayersModel('https://example.com/model.json');
} catch (err) {
console.error('Ошибка загрузки модели:', err);
}
trainingConfig.model.summary() для быстрого визуального
контроля архитектуры после загрузки.Загрузка моделей через tf.loadLayersModel обеспечивает
универсальный механизм интеграции обученных нейронных сетей в
веб-приложения и серверные приложения на Node.js, сочетая удобство
асинхронного доступа с гибкостью дальнейшей работы с сетью.