辽宁十一选五一定牛 辽宁十一选五推荐号码预测专家今日 辽宁十一选五六月走势分析预测 哪个平台有辽宁十一选五开奖结果 辽宁十一选五六码遗漏 辽宁十一选五公告 辽宁十一选五前三技巧 辽宁十一选五任选四最大遗漏 辽宁十一选五小助手 辽宁十一选五360 辽宁十一选五组二技巧 辽宁十一选五推荐号码 辽宁十一选五计划软件手机版 辽宁十一选五连线走势图百度乐彩 辽宁十一选五玩法
用户
 ?#19968;?#23494;码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,登录网站

小程序社区 首页 教程 查看内容

当微信小程序遇上 TensorFlow:本地缓存模型

Rolan 2019-7-3 10:08

从明天开始,我开始休年假,准备去云南逛一逛,估计这段时间又无法更新公众号,还请大家谅解。在《当微信小程序遇上TensorFlow - tensorflow.js篇》一文中,我介绍了在微信小程序中使用TensorFlow.js,?#20449;?#21451;可能注 ...

从明天开始,我开始休年假,准备去云南逛一逛,估计这段时间又无法更新公众号,还请大家谅解。

在《 当微信小程序遇上TensorFlow - tensorflow.js篇 》一文中,我介绍了在微信小程序中使用TensorFlow.js,?#20449;?#21451;可能注意到,小程序?#30475;?#37117;需要从网络加载模型。虽然tensorflow.js官方声称利用了浏览器的缓存技术,并不会?#30475;?#37117;从网络下载。但在微信小程序中,使用的是wx.request接口下载文件,测试下来发现,似乎没有缓存机制。虽然小程序号称?#20174;?#21363;走,但?#30475;?#37117;需要从网络下载模型,完全体现不出端推断的优点,况且深度学习模型通常也不小,通常有好几M。那我们能否将模型存储到本地呢?

查阅tfjs的文档,在浏览器中,提供了几种本地存储的方式:

  1. 将模型保存到浏览器的local storage,后续可以从local storage加载

  2. 将模型保存到浏览器的IndexDB,?#32531;?#20174;IndexDB加载

  3. 将模型通过下载方式保存到本地,?#32531;?#21487;以通过文件上载方式加载模型

微信小程序支持两?#20013;问?#30340;本地存储:数据缓存和本地文件。为此,我参考了 browser_files.ts 的实现,实现了微信小程序?#25945;?#19979;的本地文件存储 mp_files.ts 。具体代码可以参考:https://github.com/mogoweb/wechat-tfjs-core

实现上并没什么特别的?#35759;齲?#20294;是栽在微信小程序的坑里,爬了好几天才找到原因。具体说来就是 FileSystemManager.readFile(Object object) 这个接口,不要想当然的认为将 encoding 设为 binary ,就会返回 ArrayBuffer 类型数据,文档对 encoding ?#38382;?#30340;说明是:

指定读取文件的字符编码,如果不传 encoding,则以 ArrayBuffer 格式读取文件的二进制内容

所以为了以二进制字节读取文件内容,千万不要传 encoding ?#38382;?#21542;则永远返回的是 string 类型数据。

至于模型保存,可以参考如下代码,为此我为小程序定义了一个 mp:// 前缀:

const save_model = async model => {

  const saveResult = await model.save('mp://' + wx.env.USER_DATA_PATH + '/mymodel');
  console.log(saveResult);
}

加载模型,文件路径请指定正确的json和权重文件,无需加上 mp:// 前缀:

const load_model = async () => {

  let model_files = [wx.env.USER_DATA_PATH + '/mymodel.json', wx.env.USER_DATA_PATH + '/mymodel.weights.bin'];
  var model = await tf.loadLayersModel(tf.io.mpFiles(model_files));
  return model;
}

示例代码可以参考:https://github.com/mogoweb/wechat-tfjs-examples

需要注意的是, 微信小程序对于本地文件总大小有10M?#21335;?#21046; ,所以这种方法只适合比较小的模型,如果那种几十M的深度学习模型,还是尽量部署到服务器。毕竟小程序的初衷就是小巧、轻便,如果过重,就背离了小程序的设计理念。

鲜花
鲜花
鸡蛋
鸡蛋
分享至 : QQ空间
收藏
原作者: 陈正勇 来自: 云水木石
辽宁十一选五平台
辽宁十一选五一定牛 辽宁十一选五推荐号码预测专家今日 辽宁十一选五六月走势分析预测 哪个平台有辽宁十一选五开奖结果 辽宁十一选五六码遗漏 辽宁十一选五公告 辽宁十一选五前三技巧 辽宁十一选五任选四最大遗漏 辽宁十一选五小助手 辽宁十一选五360 辽宁十一选五组二技巧 辽宁十一选五推荐号码 辽宁十一选五计划软件手机版 辽宁十一选五连线走势图百度乐彩 辽宁十一选五玩法
凤凰彩票北京pk计划 腾讯官网正版皇室战争 跑跑圣诞企鹅防御炸弹 瓦伦西亚大学硕士专业 龙族幻想电脑版使用方法及按键设置 勒沃库森克拉斯 888集团对决沙龙 第五人格人物角色 国际期货分析师