Tensorflowjs: означает ли loadFrozenModel, что я не могу получить доступ к слоям?

Используется для загрузки модели по телефону tf.loadModel('https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_0.25_128/model.json')Тем не менее, мне нужно было изменить версию mobilinet.

Итак, я взял нужную версию с tennsflowflowhub, запустил ее на tenorsflow_converter и получил два файла (.pb и файл weight). Затем я загрузил его, используя tf.loadGraphModel. Hower, модель.getLayer бросает:

model.getLayer не является функцией.

загрузка выглядит так:

const model = await tf.loadGraphModel(modelUrl); //url points to .pb

Затем я сохранил модель mobilinet как замороженную модель, снова запустил ее на tenorflow_converter и попытался загрузить как tf.loadFrozenModel. который вернул то же самое.

Я не совсем понимаю.

Есть ли способ получить слои из модели, отличной от keras?

РЕДАКТИРОВАТЬ: для пояснения, модель, которую я взял из tenoflowhub: https://tfhub.dev/google/imagenet/mobilenet_v2_075_96/classification/2

1 ответ

LoadFrozenModel устарело с 0.15. LoadGraphModel делает то же самое с меньшим параметром. Он принимает только в качестве параметра файл топологии модели.

Если в загруженном объекте нет слоев, это либо потому, что модель загружена плохо, либо замороженная модель не содержит ни одного.

TF.js поддерживает два API и соответствующие форматы сериализации: API Layers (соответствующий моделям Keras) и Core API нижнего уровня (соответствующий произвольным графам TensorFlow).

В зависимости от того, где вы получаете модель и как вы ее конвертируете, ваш файл может быть загружен либо через tf.loadLayersModel() или же tf.loadGraphModel(), но не оба. Пожалуйста, смотрите таблицу доступных конверсий.

Даже если модель изначально была обучена с использованием Keras, она могла быть сохранена как низкоуровневый график TensorFlow, где структура слоев Keras потеряна. Я считаю, что это в настоящее время относится ко всем модулям TF-Hub. Таким образом, ваш текущий подход дает вам tf.GraphModel, из которого слои не могут быть восстановлены.

Мы предоставляем MobileNet v1, уже преобразованный из оригинального Keras в формат слоев TF.js по указанному вами URL-адресу, чтобы вы могли использовать loadLayersModel() (ранее loadModel()) с этим напрямую. В настоящее время мы не размещаем конвертированный MobileNet v2. Однако вы можете получить оригинальную модель Keras .h5 здесь, а затем преобразовать ее в формат слоев TF.js, используя tensorflowjs_converter,

Другие вопросы по тегам