Библиотека ml5.js предоставляет удобные инструменты для работы с моделями машинного обучения в браузере. Одной из ключевых возможностей является сохранение обученной модели прямо в браузере с использованием IndexedDB. Это позволяет сохранять состояние модели между сеансами, избегая повторного обучения при каждом открытии страницы.
IndexedDB — это встроенная база данных браузера, предназначенная для хранения больших объёмов структурированных данных, включая файлы и бинарные объекты. В контексте ml5.js она используется через механизм сохранения модели с помощью TensorFlow.js, на котором построена ml5.js.
Модель, сохранённая в IndexedDB, состоит из двух частей:
Когда модель сохраняется, ml5.js вызывает методы TensorFlow.js, которые упаковывают эти данные в IndexedDB под уникальным именем.
Для сохранения модели используется метод .save(),
доступный у объектов моделей ml5.js, таких как
NeuralNetwork, ImageClassifier или
PoseNet.
Пример сохранения модели в IndexedDB:
// Создание нейронной сети
const nn = ml5.neuralNetwork({
task: 'classification',
debug: true
});
// Обучение модели (пример)
nn.addData({ inputFeature: 1 }, { label: 'A' });
nn.addData({ inputFeature: 2 }, { label: 'B' });
nn.normalizeData();
nn.train({ epochs: 50 }, () => {
// Сохранение модели в IndexedDB
nn.save('indexeddb://my-model');
});
Ключевые моменты:
indexeddb:// указывает на тип хранилища.'my-model' — уникальное имя модели. Если модель с таким
именем уже существует, она будет перезаписана..save() работает асинхронно, так что
рекомендуется использовать обратные вызовы или
async/await.Загрузка модели из IndexedDB также выполняется с использованием TensorFlow.js через ml5.js:
ml5.neuralNetwork({ task: 'classification' }, async nn => {
const loadedNN = await nn.load('indexeddb://my-model');
// Модель готова к использованию
});
Особенности загрузки:
predict() или
classify() без дополнительного обучения.IndexedDB позволяет хранить одновременно несколько моделей. Рекомендуется использовать структурированную систему именования, чтобы не допустить конфликтов. Например:
nn.save('indexeddb://classifier-v1');
nn.save('indexeddb://regressor-v1');
Также можно создавать версионированные модели, что позволяет сохранять старые версии для тестирования и сравнения.
async/await.indexedDB.deleteDatabase('имя') или управлять ими
через стандартный интерфейс браузера.Сохранение моделей в IndexedDB особенно полезно в следующих сценариях:
IndexedDB позволяет полностью переносить вычисления на сторону клиента, повышая производительность и снижая нагрузку на сервер.
v1, v2),
чтобы отслеживать изменения.const models = await tf.io.listModels();
if ('indexeddb://my-model' in models) {
const loadedNN = await nn.load('indexeddb://my-model');
}
Это позволяет безопасно управлять локальными моделями и гарантирует устойчивость веб-приложения.