Импорт модели Keras в TensorFlow.js

Модели Keras (обычно создаваемые с помощью API Python) могут быть сохранены в одном из нескольких форматов . Формат «вся модели» можно преобразовать в формат слоев TensorFlow.js, который можно загрузить непосредственно в TensorFlow.js для вывода или дальнейшего обучения.

Целевой формат слоев TensorFlow.js — это каталог, содержащий файл model.json и набор файлов сегментированных весов в двоичном формате. Файл model.json содержит как топологию модели (она же «архитектура» или «граф»: описание слоев и способа их соединения), так и манифест файлов весов.

Требования

Для процедуры преобразования требуется среда Python; возможно, вы захотите сохранить его изолированным, используя Pipenv или Virtualenv . Чтобы установить конвертер, используйте pip install tensorflowjs .

Импорт модели Keras в TensorFlow.js представляет собой двухэтапный процесс. Сначала преобразуйте существующую модель Keras в формат слоев TF.js, а затем загрузите ее в TensorFlow.js.

Шаг 1. Преобразование существующей модели Keras в формат слоев TF.js.

Модели Keras обычно сохраняются с помощью model.save(filepath) , который создает один файл HDF5 (.h5), содержащий как топологию модели, так и веса. Чтобы преобразовать такой файл в формат слоев TF.js, выполните следующую команду, где path/to/my_model.h5 — это исходный файл Keras .h5, а path/to/tfjs_target_dir — целевой выходной каталог для файлов TF.js:

# bash

tensorflowjs_converter --input_format keras \
                       path/to/my_model.h5 \
                       path/to/tfjs_target_dir

Альтернатива: используйте API Python для экспорта непосредственно в формат слоев TF.js.

Если у вас есть модель Keras на Python, вы можете экспортировать ее непосредственно в формат слоев TensorFlow.js следующим образом:

# Python

import tensorflowjs as tfjs

def train(...):
    model = keras.models.Sequential()   # for example
    ...
    model.compile(...)
    model.fit(...)
    tfjs.converters.save_keras_model(model, tfjs_target_dir)

Шаг 2. Загрузите модель в TensorFlow.js.

Используйте веб-сервер для обслуживания преобразованных файлов модели, созданных на шаге 1. Обратите внимание, что вам может потребоваться настроить сервер на разрешение совместного использования ресурсов между источниками (CORS) , чтобы разрешить получение файлов в JavaScript.

Затем загрузите модель в TensorFlow.js, указав URL-адрес файла model.json:

// JavaScript

import * as tf from '@tensorflow/tfjs';

const model = await tf.loadLayersModel('https://foo.bar/tfjs_artifacts/model.json');

Теперь модель готова к выводу, оценке или повторному обучению. Например, загруженную модель можно сразу использовать для прогнозирования:

// JavaScript

const example = tf.fromPixels(webcamElement);  // for example
const prediction = model.predict(example);

Многие примеры TensorFlow.js используют этот подход, используя предварительно обученные модели, которые были преобразованы и размещены в облачном хранилище Google.

Обратите внимание, что вы ссылаетесь на всю модель, используя имя файла model.json . loadModel(...) извлекает model.json , а затем выполняет дополнительные запросы HTTP(S) для получения файлов сегментированных весов, указанных в манифесте веса model.json . Этот подход позволяет кэшировать все эти файлы браузером (и, возможно, дополнительными серверами кэширования в Интернете), поскольку каждый из model.json и сегментов веса меньше типичного ограничения размера файла кэша. Таким образом, в последующих случаях модель, скорее всего, будет загружаться быстрее.

Поддерживаемые функции

Слои TensorFlow.js в настоящее время поддерживают только модели Keras, использующие стандартные конструкции Keras. Модели, использующие неподдерживаемые операции или слои — например, пользовательские слои, слои Lambda, пользовательские потери или пользовательские метрики — не могут быть автоматически импортированы, поскольку они зависят от кода Python, который невозможно надежно перевести в JavaScript.