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
,