Дообучение на новых данных

Keras.js предоставляет возможность загружать предобученные модели Keras и выполнять их инференс непосредственно в браузере на Javascript. Одной из ключевых возможностей, которая расширяет потенциал использования таких моделей, является дообучение на новых данных. Этот процесс позволяет адаптировать модель к конкретной задаче или новому набору данных без необходимости тренировать сеть с нуля.

Загрузка и подготовка модели

Предварительно обученная модель экспортируется из Python с помощью формата JSON для структуры сети и бинарного формата HDF5 для весов. В Keras.js они загружаются следующим образом:

const KerasJS = require('keras-js');

const model = new KerasJS.Model({
  filepaths: {
    model: 'model.json',
    weights: 'model_weights.buf',
  },
  gpu: true
});
  • model.json содержит архитектуру сети.
  • model_weights.buf хранит параметры модели.
  • Параметр gpu позволяет ускорить вычисления на поддерживаемых устройствах.

После загрузки важно убедиться, что модель готова к инференсу:

await model.ready();

Структура данных для дообучения

Дообучение требует подготовки данных в том же формате, который использовался при исходной тренировке:

  • Входные данные должны иметь правильные размерности, соответствующие первой слою модели.
  • Выходные данные должны совпадать по размерности с последним слоем.
  • Для задач классификации рекомендуется использовать one-hot encoding для меток классов.
// Пример подготовки одного входного изображения
const inputData = new Float32Array([/* значения пикселей */]);

Ограничения Keras.js на обучение

Следует учитывать, что Keras.js ориентирован на инференс, а полноценное обучение в браузере поддерживается частично и с ограничениями:

  • Нет встроенной поддержки оптимизаторов для градиентного спуска.
  • Дообучение возможно только через модификацию весов и их частичное обновление вручную.
  • Для сложных задач рекомендуется выполнять дообучение на сервере с Keras/TensorFlow, а в браузере — только лёгкую адаптацию.

Методика частичного дообучения

Для адаптации модели под новые данные можно использовать стратегию fine-tuning:

  1. Замораживание слоёв, которые отвечают за базовые признаки.
  2. Переподготовка верхних слоёв для специфической задачи.
  3. Обновление весов модели с использованием небольшого числа новых примеров.
// Пример изменения весов верхнего слоя
const newWeights = new Float32Array([/* новые значения */]);
model.layers[layerIndex].setWeights(newWeights);

Интеграция с браузерными данными

Keras.js позволяет работать с данными, полученными из веб-камер, Canvas, или загруженными через File API:

const canvas = document.getElementById('inputCanvas');
const context = canvas.getContext('2d');
const imageData = context.getImageData(0, 0, canvas.width, canvas.height);
const inputArray = new Float32Array(imageData.data.buffer);

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

Практические советы по дообучению

  • Масштабирование данных: Нормализация входов ускоряет сходимость.
  • Мини-батчи: Использование небольших пакетов данных предотвращает переполнение памяти в браузере.
  • Регуляризация: Для предотвращения переобучения на ограниченном наборе данных можно вручную уменьшать значения весов слоёв или добавлять дроп-аут.

Проверка эффективности дообучения

После обновления весов важно провести тестирование модели на отложенных данных:

const output = await model.predict({input: inputArray});
console.log(output);

Сравнение результатов до и после дообучения позволяет оценить успешность адаптации модели к новым данным.

Ограничение вычислительных ресурсов

Дообучение в браузере сильно зависит от производительности устройства:

  • Для мобильных устройств рекомендуется использовать только легкие сети.
  • Использование gpu: true при поддержке WebGL значительно ускоряет операции.
  • Для больших наборов данных и сложных моделей лучше использовать серверное дообучение с последующим экспортом весов в Keras.js.

Заключение по методике

Дообучение моделей в Keras.js реализуется через частичное обновление весов и fine-tuning верхних слоёв, что позволяет адаптировать предобученные сети к новым данным прямо в браузере. Основные моменты успешного дообучения:

  • Подготовка данных в правильном формате.
  • Управление весами слоёв и их частичное обновление.
  • Оптимизация вычислений с учетом ограничений Javascript и браузера.
  • Проверка эффективности на отложенном наборе данных.

Эта методика делает Keras.js мощным инструментом для создания интерактивных веб-приложений с адаптивными нейросетями.