问题描述
我正在使用来自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";
但是随后出现以下错误:
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
错误:基于提供的形状[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/