Tensorflowjs:loadFrozenModel是否意味着我无法访问图层?

时间:2019-03-01 17:27:15

标签: tensorflow.js tensorflowjs-converter

用于通过调用tf.loadModel('https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_0.25_128/model.json')加载模型,但是,我需要更改mobilinet版本。

因此,我从tensorflowhub中获取了所需的版本,在tensorflow_converter上运行它,并获得了两个文件(.pb和weight文件)。然后我使用tf.loadGraphModel加载了它。但是,model.getLayer引发:

  

model.getLayer不是函数。

加载看起来像这样:

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

然后我将mobilinet模型保存为冻结模型,再次在tensorflow_converter上运行它,然后尝试将其作为tf.loadFrozenModel加载。返回了同样的东西。

我很困惑。

是否有一种方法可以从非keras模型中获取图层?

编辑:为澄清起见,我从tensoflowhub中选取的模型是: https://tfhub.dev/google/imagenet/mobilenet_v2_075_96/classification/2

2 个答案:

答案 0 :(得分:1)

从0.15开始不推荐使用

LoadFrozenModelLoadGraphModel使用较少的参数执行相同的操作。它仅将模型拓扑文件作为参数。

如果加载的对象中没有图层,则可能是因为模型加载不正确或冻结的模型不包含任何层。

答案 1 :(得分:1)

TF.js支持两种API和相应的序列化格式:Layers API(对应于Keras模型)和较低级别的Core API(对应于任意TensorFlow图)。

根据获取模型的位置以及如何转换模型,可以通过tf.loadLayersModel()tf.loadGraphModel()加载文件,但不能同时加载。请参阅table of available conversions

即使最初使用Keras训练模型,也可能将其保存为低级TensorFlow图,其中Keras层结构丢失了。我相信目前所有TF-Hub模块都是这种情况。因此,您当前的方法为您提供了tf.GraphModel,无法从中重构图层。

我们在您列出的URL上提供了已经从原始Keras转换为TF.js Layers格式的MobileNet v1,因此您可以直接使用loadLayersModel()(以前为loadModel())。我们目前不托管转换后的MobileNet v2。但是,您可以获取原始的Keras .h5模型here,然后使用tensorflowjs_converter将其转换为TF.js图层格式。