当前位置: 首页 > 编程笔记 >

TensorFlow.js 微信小程序插件开始支持模型缓存的方法

林哲茂
2023-03-14
本文向大家介绍TensorFlow.js 微信小程序插件开始支持模型缓存的方法,包括了TensorFlow.js 微信小程序插件开始支持模型缓存的方法的使用技巧和注意事项,需要的朋友参考一下

通常情况下,微信小程序追求的是短小精悍,即开即用,用完即走,适用于一些简单的应用场景。然而,随着微信小程序开放能力的提高,人们发现用微信小程序可以实现越来越多的功能,小程序也越来越复杂,越来越庞大起来。这个可以从小程序的大小限制的变化看出,最开始小程序的大小限制为1M,后来限制为2M,最新微信又给小程序提供了分包加载机制,开发者将小程序划分成不同的子包,用户在使用时按需进行加载,所有分包大小限制提高到8M。

虽然小程序的大小限制已经大大提升,但对于小程序开发者而言,仍然捉襟见肘。随便几个图片资源、js库就可能导致小程序超重,尤其对于人工智能小程序而言,更是如此。现在的深度学习模型,动辄几十M,多则一两百M。这个时候开发人员就需要进行取舍,选择那些模型规模小,但精度不那么高的模型。比如图片分类,我们就不要选择Inception V3或ResNet之类的超大规模模型,而是选择针对移动设备优化的MobileNet,也能取得不错的效果。

不过即使是MobileNet,其模型大小也有好几M,对于精简小程序大小仍是一个很大的负担。一种解决方案是从网络加载模型,不增加小程序的体积,但这并不是一个完美的解决方案,毕竟每次推导都需要从网络下载模型,会有一定的网络延迟。在前端开发中,为了保持系统的流畅,通常会采用一些缓存技巧来避免每次从网络加载图片、JS等文件。那能否将模型也作为资源缓存起来呢?

Google团队显然也意识到了这种需求,先是在TensorFlow.js中增加了对tfjs模型缓存的支持。最近,TensorFlow.js 微信小程序插件也得到了更新,支持微信小程序模型缓存。

模型缓存利用了微信小程序的storage接口,需要注意微信小程序对storage的限制:同一个微信用户,同一个小程序 storage 上限为 10MB。storage 以用户维度隔离,同一台设备上,A 用户无法读取到 B 用户的数据;不同小程序之间也无法互相读写数据。所以我们只能选用小于10M的模型。

启用模型缓存也非常简单,步骤如下:

修改app.json文件,将tfjsPlugin的版本修改为0.0.8.

"plugins": {
 "tfjsPlugin": {
  "version": "0.0.8",
  "provider": "wx6afed118d9e81df9"
 }
}

在app.js中提供localStorageHandler函数.

var fetchWechat = require('fetch-wechat');
var tf = require('@tensorflow/tfjs-core');
var plugin = requirePlugin('tfjsPlugin');
//app.js
App({
 // expose localStorage handler
 globalData: {localStorageIO: plugin.localStorageIO},
 ...
});

在模型加载时加入localStorageHandler逻辑。

const LOCAL_STORAGE_KEY = 'mobilenet_model';
export class MobileNet {
 private model: tfc.GraphModel;
 constructor() { }
 
 
 async load() {
 
 
  const localStorageHandler = getApp().globalData.localStorageIO(LOCAL_STORAGE_KEY);
  try {
   this.model = await tfc.loadGraphModel(localStorageHandler);
  } catch (e) {
   this.model =
    await tfc.loadGraphModel(MODEL_URL);
   this.model.save(localStorageHandler);
  }
 }

和浏览器缓存机制有点不同的是,只有在代码包被清理的时候本地缓存才会被清理。如果需要处理缓存,可以通过 wx.setStorage/wx.setStorageSync、wx.getStorage/wx.getStorageSync、wx.clearStorage/wx.clearStorageSync,wx.removeStorage/wx.removeStorageSync 对本地缓存进行读写和清理。

另外需要注意的是,当前tfjs模型托管在tfhub上,需要翻墙访问。项目中的说明文件也提及了这个问题,给出了解决方案,但那是针对以前托管在谷歌云上的模型,建立了中国国内用户可以访问到的镜像。耐心等待吧,相信Google的开发人员会解决tfhub的镜像问题的。

以上就是TensorFlow.js 微信小程序插件开始支持模型缓存的方法的详细内容,更多关于TensorFlow小程序支持模型缓存请关注小牛知识库其它相关文章!

 类似资料:
  • 本文向大家介绍微信小程序缓存支持二次开发封装实现解析,包括了微信小程序缓存支持二次开发封装实现解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了微信小程序缓存支持二次开发封装实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 简介 微信小程序提供了缓存的api,包括同步和异步两种,具体api不多说明,可自行查看官方文档 现在微信

  • 本文向大家介绍IOS中微信小程序播放缓存的音频文件的方法,包括了IOS中微信小程序播放缓存的音频文件的方法的使用技巧和注意事项,需要的朋友参考一下 很多时候我们都想把数据预先缓存到本地,节省带宽。但是最近在处理微信小程序播放缓存到本地的音频文件的时候,遇到一些小问题,然后对于安卓和IOS需要采用不同的播放策略。 首先,如果哪怕用audio标签来播放在线的音频文件,假如服务端没有实现断点续传,IOS

  • 本文向大家介绍小程序调用微信支付的方法,包括了小程序调用微信支付的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了小程序调用微信支付的具体代码,供大家参考,具体内容如下 首先调用小程序wx.login登录接口  获取用户code 将code作为参数  传给后端  调用后端接口wechat/pay/prepay 获取后端  这五个返回值 nonceStr  package2 pay

  • 本文向大家介绍Fundebug支持监控微信小程序HTTP请求错误的方法,包括了Fundebug支持监控微信小程序HTTP请求错误的方法的使用技巧和注意事项,需要的朋友参考一下 摘要: Fundebug的微信小程序错误监控插件更新至0.5.0,支持监控HTTP请求错误。 接入插件 接入Fundebug的错误监控插件非常简单,只需要下载fundebug.0.5.0.min.js,在app.js中引入并

  • 本文向大家介绍微信小程序-详解微信登陆、微信支付、模板消息,包括了微信小程序-详解微信登陆、微信支付、模板消息的使用技巧和注意事项,需要的朋友参考一下 微信公众平台近日悄然开始内测微信小程序(微信公众号)功能,引来无数开发者和普通用户关注,微信支付的能力,是随着小程序的发布一并推出的,具有介绍如下: wx.login(OBJECT) 调用接口获取登录凭证(code)进而换取用户登录态信息,包括用户

  • 本文向大家介绍微信小程序使用蓝牙小插件,包括了微信小程序使用蓝牙小插件的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了微信小程序使用蓝牙小插件,供大家参考,具体内容如下 bluetooth.js index.js 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。