专栏首页大龄程序员的人工智能之路手把手教你开发人工智能微信小程序(0):构建tfjs

手把手教你开发人工智能微信小程序(0):构建tfjs

本文将介绍如何从源码构建出 TensorFlow JS 库(tfjs)。对于大多数微信小程序开发者而言,并不需要经历这一步,要做的仅仅是把编译好的 tfjs 库加入微信小程序工程中。但我还是希望说说如何从源码编译出 tfjs 库,为什么呢?主要出于两个原因:

  1. 完整的 tfjs 库大约有 900K,看起来是一个很小的体积,但我们要知道,微信小程序包有 2M 的大小限制。微信小程序添加一点图片,加上深度学习模型文件,很容易超过 2M 的大小。所以 tfjs 库能减则减,可能在项目开发中需要对 tfjs 库进行裁剪。
  2. tfjs 主要是为浏览器和 NodeJS 而开发,微信小程序虽然也采用基于 web 的技术,但有些地方进行了限制,比如 web 中广泛使用的 fetch API 就被砍掉了。在某些情况下我们可能需要修改 tfjs 的源码,这个时候就需要自行构建 tfjs 库。

TensorFlow JS 主要包含 4 个重要的模块,在老的版本中,它们存在于几个独立的 git 库: tjfs-core, tfjs-layers, tfjs-converter, tfjs-data。在最新的版本中,它们整合到同一个 git 库中:

  • TensorFlow.js Core, tfjs核心库,提供灵活的低层次API,由deeplearn.js发展而来。
  • TensorFlow.js Layers, 提供高层次API,实现了类似于Keras的函数。
  • TensorFlow.js Data, 提供简单的API加载和准备数据,功能类似于tf.data。
  • TensorFlow.js Converter, 提供工具导入TensorFlow SavedModel格式模型到TensorFlow.js。

上述4个模块中, tfjs-core 是最基础的组件,其它几个模块都依赖这一模块。该可以单独编译,功能独立,能够单独使用,从而可以减少 tfjs 库的体积。

安装yarn

tfjs 采用了 yarn 构建系统,对于前端开发者而言应该比较熟悉。下面简单说说如何在 Ubuntu 18.04 上安装 yarn ,其它平台上的安装方法,请自行搜索。

  1. 导入 yarn 库的GPG key:
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
  1. Ubunut 系统添加 yarn APT库:
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
  1. 安装 yarn:
sudo apt update
sudo apt install yarn
  1. 检查 yarn 是否安装成功,如下命令输出 yarn 的版本号:
yarn --version

当前输出的版本号为:

1.21.1

需要注意的是, Ubuntu 中另外有个包中也有同名程序,如果你之前未安装过 yarn,运行yarn命令可能会出现如下提示:

Command 'yarn' not found, but can be installed with:

sudo apt install cmdtest

请勿安装这个 cmdtest,这是另外一个工具,并不是 yarn 构建系统。

构建tfjs库

  1. 克隆 tfjs 源码库:
git clone https://github.com/tensorflow/tfjs.git
  1. 构建 tfjs
cd tfjs/tfjs
yarn build-npm

在当前目录下会生成一个 tensorflow-tfjs-x.x.x.tgz 的压缩包,其中 x.x.x 代表 tfjs 的版本号,写这篇文章时最新的版本号为1.5.1。如果我们要在项目中加入 tfjs 库,可以直接使用 dist 目录下的 tf.min.js 文件。

如果在项目中,我们只使用 tfjs-core,可以单独构建 tfjs-core:

cd tfjs/tfjs-core
yarn build-npm

编译出的 tfjs-core 库文件位于 dist 子目录下,名为 tf-core.min.js

小结

本文介绍了如何从源码构建 tfjs 库,对于大多数微信小程序开发者而言并不需要,但如果你希望裁剪和定制 tfjs ,就可能需要从源码构建。在下一篇文章中,我将介绍人工智能微信小程序 Hello WeChat ,敬请关注!

本文分享自微信公众号 - 云水木石(ourpoeticlife),作者:陈正勇

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 当微信小程序遇上TensorFlow - 官方文档

    前一段时间为了在微信小程序中使用tensorflow.js,对tfjs-core代码做了一些修改,具体情况请参考我之前写的几篇文档:

    云水木石
  • [序列模型] Natural Language Processing & Word Embeddings习题解析

    通常词语向量的维度小于词汇表的大小,绝大部分词语向量的大小在50~400,所以答案是False。

    云水木石
  • 生命不息,折腾不止:Jetson Nano填坑之软件篇

    作为一名每天对着各种裸板的系统工程师,对Jetson Nano会踩到各种坑是做好了充分准备的,本着踩坑填坑的精神,在这里记录一下踩坑经历,供大家一乐。如何避开这...

    云水木石
  • 当微信小程序遇上TensorFlow - 官方文档

    前一段时间为了在微信小程序中使用tensorflow.js,对tfjs-core代码做了一些修改,具体情况请参考我之前写的几篇文档:

    云水木石
  • JS控制Video播放器(快进、后退、播放、暂停、音量大小)

    比如:向上键对应的keyCode为38,向下键对应的keyCode为40,向左键对应的keyCode为37,向右键对应的keyCode为39,空格键对应的key...

    用户1518699
  • JS控制Video播放器(快进、后退、播放、暂停、音量大小)

    比如:向上键对应的keyCode为38,向下键对应的keyCode为40,向左键对应的keyCode为37,向右键对应的keyCode为39,空格键对应的key...

    用户6973020
  • 【计算机网络】 DNS学习笔记 (>﹏<)

    参考书籍 《计算机网络-自顶向下》  作者 James F. Kurose DNS的作用 DNS是因特网的目录服务 DNS是因特网的目录服务,它提供了主机名到I...

    外婆的彭湖湾
  • 对比3家主流视频网站的上传功能后,我决定放弃一家

    先来说说背景,2周前开始录制了一批软件使用的培训视频,总不能一直百度网盘发给客户下载观看。所以就开始上传到主流的视频网站。

    崔文远TroyCui
  • iOS逆向工程之App脱壳

    本篇博客以微信为例,给微信脱壳。"砸壳"在iOS逆向工程中是经常做的一件事情,,因为从AppStore直接下载安装的App是加壳的,其实就是经过加密的,这个“砸...

    lizelu
  • 闷骚码农的内心世界

    ”连续加班时“ : ? “拍照做宣传时”: ? “看到自己需要解决的bug列表时”: ? “面对测试反工的bug时”: ? “听到不懂技术的人说这个功能很...

    程序员互动联盟

扫码关注云+社区

领取腾讯云代金券