Tensorflow Mobilenet离线使用模型

问题描述

我正在使用来自tensorflow的mobilenet,并试图离线加载模型。

模型在此处加载:

tf.loadModel(this.path)]

我的第一种方法是简单地下载model.json并指向该文件,而不是我的代码中的完整URL,如下所示:

   // this.path = 'https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_1.0_224/model.json';
   this.path = "./model.json";

但是随后出现以下错误

enter image description here

GET https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_1.0_224/group37-shard1of1 net::ERR_INTERNET_disCONNECTED
weights_loader.js:47 

如何下​​载并正确指向权重以供离线使用?


更新 现在,我只是使用错误消息中的链接手动下载了每个碎片。

https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_1.0_224/group1-shard1of1 https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_1.0_224/group1-shard1of1 https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_1.0_224/group1-shard1of1 依此类推 https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_1.0_224/group55-shard1of1

现在,组可以正确加载:

enter image description here

但是我收到了一个新的错误消息:

错误:基于提供的形状[1,1,1024,1000]和dtype float32,张量应具有1024000的值,但应具有410072

解决方法

如果您已安装了tensorflow,则可以使用MobileNet和MobileNet版本2模型,如下所示。文档在[这里。] [1]。对于原始版本,您可以使用以下代码获取在图像尺寸为224 X 224的imagenet数据集上训练的模型的权重。对于图像尺寸224、192,160,128,有四组预训练权重可用,因此请选择所需的一种。在下面,我选择了224 X 224图像尺寸的权重。可变权重将包含预先训练的权重。

image_size=224
mobile = tf.keras.applications.mobilenet.MobileNet( include_top=True,input_shape=(image_size,image_size,3),weights='imagenet',alpha=1,depth_multiplier=1,dropout=.1)
model = Model(inputs=mobile.input,outputs=mobile.output)  
model.compile(Adamax(lr=.001),loss='categorical_crossentropy',metrics=['accuracy'])
weights=model.get_weights()


  [1]: https://keras.io/api/applications/mobilenet/

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...