Сохранение модели в файловую систему (downloads)

Библиотека ml5.js предоставляет удобный интерфейс для работы с моделями машинного обучения в JavaScript, упрощая взаимодействие с TensorFlow.js. Одной из ключевых возможностей является сохранение обученных или дообученных моделей на локальной машине пользователя. Это позволяет использовать модели повторно, обмениваться ими или интегрировать в веб-приложения без повторного обучения.


1. Формат моделей в ml5.js

ml5.js использует для хранения моделей формат TensorFlow.js, который включает два основных компонента:

  • Метафайл модели (model.json) — содержит структуру нейронной сети, конфигурацию слоёв, веса по умолчанию и ссылки на бинарные файлы весов.
  • Файлы весов (*.bin) — содержат обученные параметры модели. Эти файлы могут быть разделены на несколько частей в зависимости от размера модели.

При сохранении модели в файловую систему браузера создаются эти два типа файлов, которые могут быть загружены для дальнейшего использования.


2. Метод save() для моделей

В ml5.js почти каждая модель, поддерживающая обучение, предоставляет метод save(), позволяющий сохранить её локально. Синтаксис:

model.save([fileName]);
  • fileName (необязательный) — строка с именем файла. Если не указать, будет использовано стандартное имя, например model.

Пример для классификатора изображений с использованием ml5.imageClassifier:

let classifier;

function setup() {
  createCanvas(400, 400);
  classifier = ml5.imageClassifier('MobileNet', modelReady);
}

function modelReady() {
  console.log('Модель загружена и готова к использованию');
}

function saveModel() {
  classifier.save('myImageClassifier');
}

После вызова classifier.save('myImageClassifier') в браузере появится диалог сохранения, и будут загружены файлы myImageClassifier.json и соответствующие файлы весов .bin.


3. Сохранение модели после обучения

Если модель была дообучена на пользовательских данных (transfer learning), важно сохранять именно обновлённые веса, иначе при повторном использовании будут применяться исходные значения модели. Например, с ml5.neuralNetwork:

const options = {
  task: 'classification',
  debug: true
};

const nn = ml5.neuralNetwork(options);

function trainModel() {
  nn.addData({input: [0.1, 0.2]}, {output: [1]});
  nn.addData({input: [0.2, 0.3]}, {output: [0]});
  
  nn.normalizeData();
  
  nn.train({epochs: 50}, finishedTraining);
}

function finishedTraining() {
  console.log('Обучение завершено');
  nn.save('trainedNN');
}

В результате сохранения создаются файлы trainedNN.json и соответствующие .bin, отражающие обученные веса нейросети.


4. Особенности сохранения в браузере

  • Скачивание файлов: Метод save() инициирует скачивание, которое работает через стандартный механизм браузера Blob и a.href. Файлы сохраняются в папку загрузок или по пути, выбранному пользователем.
  • Совместимость: Загруженные файлы модели могут быть использованы повторно в ml5.js или напрямую через TensorFlow.js с методом tf.loadLayersModel().
  • Обработка больших моделей: Для больших моделей браузеры автоматически разделяют бинарные файлы весов на несколько частей, чтобы избежать проблем с памятью.

5. Загрузка сохранённых моделей

Для последующего использования сохранённой модели применяется метод ml5.loadXXX. Например, для нейросети:

ml5.neuralNetwork({task: 'classification'})
  .load('trainedNN/model.json', loaded);

function loaded(err, model) {
  if (err) {
    console.error('Ошибка загрузки модели:', err);
    return;
  }
  console.log('Модель успешно загружена');
}

Здесь trainedNN/model.json — путь к локальному файлу, либо URL к удалённому хранилищу. После загрузки модель готова к предсказаниям и дообучению.


6. Практические рекомендации

  • Для классификаторов изображений и моделей transfer learning сохранять модель сразу после обучения или дообучения.
  • Всегда проверять, что сохраняются актуальные веса, а не только структура сети.
  • При использовании нескольких моделей в проекте давать им уникальные имена, чтобы избежать перезаписи файлов.
  • Для интеграции с веб-приложениями можно хранить файлы на сервере и загружать через URL, используя ml5.loadModel().

7. Примеры использования

Сохранение классификатора текста:

const charRNN = ml5.charRNN('models/shakespeare/', modelReady);

function modelReady() {
  console.log('CharRNN готов к генерации текста');
}

function saveCharRNN() {
  charRNN.save('myShakespeareModel');
}

Сохранение модели GAN после обучения на кастомных данных:

const gan = ml5.GAN('models/ganModel', ganReady);

function ganReady() {
  console.log('GAN модель готова');
}

// После обучения GAN
gan.save('customGANModel');

Эти методы обеспечивают долговременное хранение моделей и позволяют повторно использовать обученные данные без необходимости повторного обучения.